gpt4 book ai didi

bash - env 在 Bash 中究竟做了什么?

转载 作者:行者123 更新时间:2023-11-29 08:48:26 26 4
gpt4 key购买 nike

我在使用 Bash 时(在 Cygwin 下)出现这种行为:

$ printf '\u00d5'
\u00d5
$ env printf '\u00d5' # This results in the behavior I want
Õ

无论我在终端中使用 UTF-8 还是 ISO-8859-1 编码都没有关系。

我的问题是:env 到底做了什么?为什么在这种特定情况下我需要它?

最佳答案

env 不在bash 中,它是一个独立的可执行文件,用于在运行程序之前设置或清除环境变量。在您的特定情况下,它运行二进制 printf 而不是内置的 shell。您可以使用绝对路径获得相同的结果:

/usr/bin/printf '\u00d5'

侵入性最小的方法可能如下:重新定义 printf 函数并让 Bash 处理其余部分。获取包含以下内容的文件:

function printf()
{
$(which printf) "$@"
}

或作为单行 function printf() { $(which printf) "$@"; }。当然,您可以将 $(which printf) 替换为 /usr/bin/printf ...

然后像您习惯的那样简单地使用 printf。您的脚本保持不变,您甚至可以引入一个条件来仅在某些 Bash 版本上定义函数。

据我所知,您也可以省略 function,但我发现它增加了可读性。

[编辑:function 关键字是一个 bash 扩展; printf () { ...; } 是 POSIX 语法。如果您使用 function 关键字,则函数名称后的 () 是可选的。]


通常,env 也用在力求可移植的脚本的 hash-bang 行中。原因是 env 几乎总是在 /usr/bin/env,而 bash 并不总是在 /bin/bash 正如哈希爆炸行所暗示的那样。示例:

#!/usr/bin/env bash

也适用于其他程序/解释器:

#!/usr/bin/env python

关于bash - env 在 Bash 中究竟做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12691461/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com