【发布时间】:2011-04-25 00:47:04
【问题描述】:
我在使用反引号使我的 shellscript 工作时遇到问题。这是我遇到问题的脚本的示例版本:
#!/bin/sh
ECHO_TEXT="Echo this"
ECHO_CMD="echo ${ECHO_TEXT} | awk -F' ' '{print \$1}'"
result=`${ECHO_CMD}`;
echo $result;
result=`echo ${ECHO_TEXT} | awk -F' ' '{print \$1}'`;
echo $result;
这个脚本的输出是:
sh-3.2$ ./test.sh
Echo this | awk -F' ' '{print $1}'
Echo
为什么使用变量的命令的第一个反引号实际上并没有执行完整的命令,而是只返回第一个命令的输出和第二个命令?为了让第一个反引号执行命令,我遗漏了一些东西?
【问题讨论】:
-
反引号已经过时了,不应该再使用了——改用
$()会省去很多麻烦 -
请参阅BashFAQ/050(不要将命令放在变量中)和BashFAQ/048(避免使用
eval)。此外,您的 shebang 说“#!/bin/sh”,提示说“sh”,但您的问题标签说[bash],这不是一回事。 -
我没有设置 bash 标签,其他用户在我发布后更改了它。
-
POSIX sh 支持
$()。没有任何借口。