spa*_*c24 4 bash shell escaping sh double-quotes
问题基本上是,bash 如何处理双引号和括号?
我无法想出更好的例子,所以对此表示歉意,但想象一下这样的事情:
"$(echo "${foo}")"
那里会发生什么?技术上是否${foo}超出报价范围?bash 是否足够聪明,能够考虑它在括号内并从内向外工作?效果会\"${foo}\"更好吗?
我试过用谷歌搜索这个,但没有运气。请注意,这与嵌套引用问题不同,因为它包括扩展。
谢谢!
每个命令替换都会建立一个新的引用上下文,因此避免嵌套命令替换内分词的正确方法是使用双引号。
在此示例中,保留空白:
$ echo "$(echo "$(echo 'foo bar')")" # outer echo sees 'foo bar'
foo bar
Run Code Online (Sandbox Code Playgroud)
然而,缺少任何双引号意味着该字符串被 shell 分割:
$ echo $(echo "$(echo 'foo bar')") # outer echo sees 'foo' 'bar'
foo bar
$ echo "$(echo $(echo 'foo bar'))" # middle echo sees 'foo' 'bar'
foo bar
Run Code Online (Sandbox Code Playgroud)
echo输出每个参数,用空格分隔,这就是“foo”和“bar”之间的单个空格的来源。
| 归档时间: |
|
| 查看次数: |
1922 次 |
| 最近记录: |