为什么命令替换会以这些方式工作?

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

在我的 .bashrc 文件中,我有以下内容:

export USER_HOME1='/home/$(id -nu)/' 
export USER_HOME2='/home/'$(id -nu)'/'
export USER_HOME3="/home/$(id -nu)/"
export USER_HOME4="/home/\$(id -nu)/"

命令替换仅适用于 USER_HOME2 和 USER_HOME3。它对 USER_HOME2 有何作用?

在单引号内,“$”被视为文字字符,而不具有任何特殊含义。 在双引号内,某些字符具有特殊含义,如果我们需要按字面意思使用它们,则需要转义它们。 这可以解释为什么命令替换在 USER_HOME3 中有效,但在 USER_HOME1 和 USER_HOME4 中无效。

USER_HOME2 如何工作? shell 如何知道如何配对单引号? 它是否有效地连接了三个字符串:“/home/”、$(id -nu) 的输出和“/”? 在这种情况下,我们可以将 USER_HOME2 重写为

export USER_HOME2=/home/$(id -nu)/ 
bash shell command-line
1个回答
1
投票

USER_HOME2 如何工作? shell 如何知道如何配对单引号?它是否有效地连接了三个字符串:“/home/”、$(id -nu) 的输出和“/”?在这种情况下,我们可以将 USER_HOME2 重写为

是的,这正是正在发生的事情。从 shell 的角度来看,以下字符串都是相同的:

  • abc
  • 'abc'
  • "abc"
  • 'a'b'c'
  • "a"b"c"
  • ''abc''
  • 'ab''c'
  • 'ab'"c"

命令替换必须用双引号引起来,否则全局扩展将应用于结果(除非它出现在参数赋值的右侧;在这种情况下,不会应用进一步的扩展)

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