ksh - 为什么当前工作目录中“\”文件的存在会改变变量处理的行为

ksh - why presence of the "\" file in current working directory changes behavior of variable processing

我遇到了第三方 ksh 脚本的问题。 发现,由于用户主目录中名为“\”的文件而失败。

这是一个简单的测试用例:

$ mkdir -p ~/dir1 && cd ~/dir1 && touch '\' && x="\* a" && echo $x
\ a
$ mkdir -p ~/dir2 && cd ~/dir2 && x="\* a" && echo $x
\* a

问题是,为什么工作目录中存在“\”文件会改变结果。 这是预期的吗?

谢谢。

T.

看起来像预期的行为。

如果您希望两种情况下的行为相同,请在脚本中使用 set -o noglob,或者 运行 带有 -f 选项的脚本以禁用文件名替换。

默认情况下 * 是插值时的特殊字符,因此将匹配任何存在的文件(在您的情况下,dir1 将仅包含一个具有反斜杠字符名称的真实文件。)

第二个目录 dir2 没有真正的文件,因此 ksh 只显示您输入的模式。