要将命令的输出作为一个变量存储在sh/ksh/bash中,您可以使用任何一种方法
var=$(command)
or
var=`command`
这两种方法有什么区别?
要将命令的输出作为一个变量存储在sh/ksh/bash中,您可以使用任何一种方法
var=$(command)
or
var=`command`
这两种方法有什么区别?
当前回答
它们的行为是一样的。区别在于语法上:嵌套$()比嵌套' '更容易:
listing=$(ls -l $(cat filenames.txt))
vs.
listing=`ls -l \`cat filenames.txt\``
其他回答
由于$()可以像$(echo foo$(回显条))那样容易地嵌套在自身内,因此反撇号/重音标记已被弃用,而改用$()进行命令替换。还有其他不同之处,比如反斜杠在反标记/墓碑版本中的解析方式,等等。
请参阅BashFAQ/082,了解始终偏爱$(…)语法的几个原因。
还请参阅POSIX规范以获得关于各种差异的详细信息。
除了可以在命令中使用哪些非转义字符之外,两者几乎没有区别。你甚至可以用‘……的命令(反之亦然),用于更复杂的两级深层命令替换。
对反斜杠字符/操作符的解释略有不同。除此之外,当筑巢时……'替换命令时,必须使用\转义内部'字符,而使用$()替换时,它自动理解嵌套。
当使用旧的反斜杠形式时,反斜杠保留其字面意义,除非后面跟着$、'或\。前面没有反斜杠的第一个反标记将终止命令替换。
当使用较新的$(命令)形式时,括号之间的所有字符组成命令;没有人被特别对待。
这两种形式都可以嵌套,但反标记形式需要以下形式。
`echo \`foo\``
相对于:
$(echo $(foo))
“这两种方法有什么不同吗?”
注意这种行为:
A="A_VARIABLE"
echo "$(echo "\$A")"
echo "`echo "\$A"`"
你会得到以下结果:
$A
A_VARIABLE
它们的行为是一样的。区别在于语法上:嵌套$()比嵌套' '更容易:
listing=$(ls -l $(cat filenames.txt))
vs.
listing=`ls -l \`cat filenames.txt\``