使用 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)
for a /usr/bin/printf
...
然后像平常一样使用 printf 即可。您的脚本保持不变,您甚至可以引入一个条件来仅在某些 Bash 版本上定义该函数。
AFAIK 你也可以省略function
,但我发现它增加了可读性。
[编辑:function
关键字是bash
扩大;printf () { ...; }
是 POSIX 语法。如果您确实使用function
关键字,函数名后面的 () 是可选的。]
通常,env
也用在力求可移植的脚本的 hash-bang 行中。原因是env
几乎总是在/usr/bin/env
, while bash
并不总是在/bin/bash
正如许多哈希线所暗示的那样。例子:
#!/usr/bin/env bash
也适用于其他程序/解释器:
#!/usr/bin/env python
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)