首页 > 解决方案 > ksh - 为什么当前工作目录中存在“\”文件会改变变量处理的行为

问题描述

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

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

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

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

谢谢。

T。

标签: ksh

解决方案


看起来像预期的行为。

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

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

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


推荐阅读