tsh*_*ang 283 command-line shell command-substitution
命令替换有两种语法:美元括号和反引号。运行top -p $(pidof init)并top -p `pidof init`给出相同的输出。这两种做同样事情的方式,还是有区别?
wag*_*wag 382
旧式反引号` `确实处理反斜杠和嵌套有点不同。新式$()将两者之间的所有内容解释( )为命令。
echo $(uname | $(echo cat))
Linux
echo `uname | `echo cat``
bash: command substitution: line 2: syntax error: unexpected end of file
echo cat
Run Code Online (Sandbox Code Playgroud)
如果嵌套反引号被转义,则有效:
echo `uname | \`echo cat\``
Linux
Run Code Online (Sandbox Code Playgroud)
反斜杠乐趣:
echo $(echo '\\')
\\
echo `echo '\\'`
\
Run Code Online (Sandbox Code Playgroud)
新样式$()适用于所有符合POSIX标准的 shell。
正如mouviciel指出的那样,旧` `壳可能需要旧式。
除了技术角度,老式` `还有视觉上的劣势:
I like $(program) better than `program`'`'`''`''`'`''`'(并且 SE` `用于自己的目的,写这个答案很痛苦:)
bal*_*lki 42
我观察到的明显区别是你不能嵌套反引号,而你可以嵌套$()。也许两者都出于遗留原因而存在。同样,.和source命令是同义词。
要添加其他人在这里所说的内容,您可以使用反引号来模拟内联注释:
echo foo `# I'm a comment!` bar
Run Code Online (Sandbox Code Playgroud)
输出是:foo bar。
有关更多信息,请参阅以下内容:https : //stackoverflow.com/a/12797512(另请注意该帖子下方的评论。)
另请注意,$()与使用反引号相比,将使用更多的系统资源,但速度稍快。
在Mastering Unix shell scripting 中,Randal K. Michael 在名为“逐行处理文件的 24 种方法”一章中做了一个测试。