我使用 `...` 获得了预期结果,但使用 $(...) 失败
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
在 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 中起作用。