为什么命令替换输出中的分号与原始代码中的分号不相同?

问题描述 投票:0回答:1

根据我对命令替换的理解,这应该可以,但是不能,您能解释一下为什么以及如何做这样的事情。

cd ..; echo 123

cd $(echo "..; echo 123")

bash shell echo cd command-substitution
1个回答
2
投票

命令替换结果未经过所有解析阶段;他们only经历了单词拆分[1]和全局扩展[2]。

这意味着您的结果等同于:

cd "..;" "123"

...分号被视为文字文本,而不是shell语法。

这是一个功能,而不是错误:如果将命令替换结果解析为语法,则基本上不可能编写用于处理不受信任数据的安全Shell脚本。


[[1]将结果分成IFS中字符的“单词”-或默认为空格。[[2]查看是否将每个结果词视为文件名匹配模式,如果可以,则将其与本地文件系统匹配。

© www.soinside.com 2019 - 2024. All rights reserved.