Bash,是隐式引用的子shell输出

时间:2017-09-23 06:31:01

标签: linux bash shell

在以下示例中

>>

这是使用引号的正确方法吗?我知道我应该总是引用变量,但是隐式引用了子shell输出吗?

1 个答案:

答案 0 :(得分:5)

命令替换($())的输出未被隐式引用:

$ for i in $(echo "foo bar"); do echo $i; done
foo                           
bar

上面的循环沿着单词分割未加引号的输出。我们可以通过引用结果来阻止此行为:

$ for i in "$(echo "foo bar")"; do echo $i; done
foo bar

但是,在分配变量时,如在您的示例中,即使没有引号,也不会拆分子shell的结果:

$ baz=$(echo "foo bar")
$ echo "$baz"
foo bar

与StackOverflow的语法高亮不同,shell理解命令替换中的引用,因此我们不需要转义嵌套引号:

$ baz="foo"
$ echo "$(echo "$baz $(echo "bar")")"
foo bar