代码之家  ›  专栏  ›  技术社区  ›  spalac24

Bash如何处理双引号内的括号?

  •  4
  • spalac24  · 技术社区  · 7 年前

    基本上,问题是bash如何处理双引号和方括号?

    "$(echo "${foo}")"

    那里发生了什么?是 ${foo} 技术上不在报价范围内?bash是否足够聪明,可以同时考虑它在括号内并由内而外工作?将 \"${foo}\"

    我试过用谷歌搜索这个,但没有成功。请注意,这与嵌套引用问题不同,因为它包括扩展。

    谢谢

    3 回复  |  直到 7 年前
        1
  •  4
  •   Tom Fenech    7 年前

    在本例中,保留空白:

    $ echo "$(echo "$(echo 'foo     bar')")" # outer echo sees 'foo     bar'
    foo     bar
    

    但是,缺少任何双引号意味着字符串被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
    

    echo 输出每个参数,由空格分隔,“foo”和“bar”之间的单个空格来自空格。

        2
  •  3
  •   Jahid Ramsy de Vos    7 年前

    你举的例子 完全避免分词:

    "$(echo "${foo}")"
    

    虽然

    "$(echo ${foo})"
    

    $foo .

    $() 打开一个子shell,您也需要在此子shell中引用您的变量。考虑以下示例:

    "$(echo "$(echo "$foo")")"
    

    上面的一对引号都不是可选的,如果您错过了其中任何一个,您将受到分词的影响。

    "$foo var in same shell, $(cmd) - this output is also in the same shell"
    

    在上面, 以及 cmd ,则需要引用该变量。

        3
  •  -2
  •   Snow    7 年前

    "$(echo "$\{foo\}")"