有关shellcript反引号的问题

ben*_*enw 10 shell backticks

我在使用反引号使shellcript工作时遇到问题.这是我遇到问题的脚本的示例版本:

#!/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;
Run Code Online (Sandbox Code Playgroud)

该脚本的输出是:

sh-3.2$ ./test.sh 
Echo this | awk -F' ' '{print $1}'
Echo
Run Code Online (Sandbox Code Playgroud)

为什么使用变量执行命令的第一个反引号实际上并不执行完整命令,而只返回第一个命令的输出和第二个命令?我错过了一些东西,以便获得第一个反复执行命令?

cod*_*ict 14

您需要使用eval它才能使其正常工作

result=`eval ${ECHO_CMD}`;
Run Code Online (Sandbox Code Playgroud)

代替

result=`${ECHO_CMD}`;
Run Code Online (Sandbox Code Playgroud)

没有 eval

${ECHO_TEXT} | awk -F' ' '{print \$1}
Run Code Online (Sandbox Code Playgroud)

这将扩展到

Echo this | awk -F' ' '{print \$1}
Run Code Online (Sandbox Code Playgroud)

将被视为参数echo并将逐字输出.随着eval这条线将实际运行.