ksh - ksh - 为什么当前工作目录中存在“\”文件会改变变量处理的行为
问题描述
我遇到了第三方 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 只显示您输入的模式。
推荐阅读
- python - MultiFileField 不返回文件,返回 _str_
- python - 如何使用正则表达式在文件夹中查找文件并将它们移动到不同的文件夹
- java - com.amazonaws.services.s3.model.PutObjectRequest 中使用的文件传输协议
- javascript - javascript在动态内容中使用反引号转义冒号和数字
- python - urlopen 错误 [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056)
- python - 在列表中找到正确划分另一个元素的最大元素
- c - 为什么会出现错误“Segmentation fault 11”以及如何在 C 中修复它?
- python - 如何通过在 python 字典中使用 fromkey() 选择特定键来创建新字典?
- javascript - 有些东西阻止 addEventListener(type, handler) 在 DOM 中工作
- powershell - 无法在 Windows Server 上卸载 IoT Edge