我正在尝试创建一个 shell 脚本,将多个命令连接到一个字符串,然后执行这些命令。
以下成功(创建“y”和“z”文件并打印 ls 输出):
$ /bin/touch /z && ls && /bin/touch /y
但以下失败(创建 'y' 和 'z' 文件,还有 '&&' 和 'ls' 文件)
$ A="/bin/touch /z && ls && /bin/touch /y"
$ $A
似乎通过使用$A
二进制执行该行将touch
字符串的其余部分作为参数,并且&&
运算符没有按预期执行。&&
(我也尝试用;
,||
等进行切换,但得到了相同的结果)
我发现了eval $A
诀窍,但我仍然很好奇为什么会发生这种情况。(并且可能想跳过评估的需要)
谢谢!