在以下示例中
>>
这是使用引号的正确方法吗?我知道我应该总是引用变量,但是隐式引用了子shell输出吗?
答案 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