我正在使用以下 bash 脚本来检索“cmp”命令的执行状态:
a="./textX"
b="./textX"
comm="cmp ${a} ${b}"
""${comm}""
statusX=$?
echo "Here is cmp status: ${statusX}"
此脚本有效。(出于脚本验证目的,此实例中的变量 a 和 b 相同。)但是,我的某些文件名包含空格。例如,如果我用不同的文件替换 b,则如下:
b="'./text Y'"
脚本失败并显示以下消息:
cmp:无效--忽略初始值‘Y’
在我看来,解析器似乎没有将 b 维护为一个标记。如何修复?我花了几个小时来解决这个问题。我是新手。感谢您的帮助。
答案1
使用数组,引用包含空格或其他 shell 特殊字符的元素,例如
comm=(cmp "${a}" "${b}")
然后评估为
"${comm[@]}"
仅供参考,你的引用""${comm}""
没有帮助;它只是围绕着未引用变量扩展${comm}
(因此受制于单词拆分和通配)具有两个空字符串。