我在使用反引号使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
这条线将实际运行.