Bash 中 $(...) 和 `...` 有什么区别

Bash 中 $(...) 和 `...` 有什么区别

我使用 `...` 获得了预期结果,但使用 $(...) 失败

kill $(ps ux | grep S..\.tcl | grep -v grep | awk '{print $2}')

Illegal variable name.

kill `ps ux | grep S..\.tcl | grep -v grep | awk '{print $2}'`

(kill expected processes)

通过谷歌搜索,我发现有些人说它们是可以互换的,但这个例子却不是。那么,Bash 中的 $(...) 和 `...` 有什么区别?

答案1

我做了一个

grep -al 'Illegal variable name' /bin/*

并在 /bin/csh 中找到了该消息。看起来您正在运行韓軟體给出命令时不要使用 bash。例如:

csh $ echo `echo abc`
abc
csh $ echo $(echo abc)
Illegal variable name.

答案2

关于反引号(`)也称为命令替换的一些解释:

https://unix.stackexchange.com/questions/27428/what-does-backquote-backtick-mean-in-commands

https://stackoverflow.com/questions/4708549/whats-the-difference-between-command-and-command-in-shell-programming

在 bash (git-bash) 中我也得到了不同的结果。运行文件中的脚本,例如 /c/pathToScript/test.sh

#!/bin/bash
WORK_DIR=/c/myWorkingDirPath;
cd $WORK_DIR;
if [ `pwd` != $WORK_DIR ]; then
  echo "Oh my... "; # `pwd` returns /c/pathToScript 
fi
if [ $(pwd) != $WORK_DIR ]; then
  echo "Thank Goodness... "; #$(pwd) returns /c/myWorkingDirPath
fi

$(pwd) 在我运行该过程时创建的子 shell 中起作用。

相关内容