使用 Bash 脚本中的变量将带有空格的文件名传递到 Linux 函数中

使用 Bash 脚本中的变量将带有空格的文件名传递到 Linux 函数中

我正在使用以下 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}(因此受制于单词拆分和通配)具有两个空字符串。

相关内容