在shell脚本中使用反引号的问题
在shell脚本中使用反引号的问题
我在使用反引号时遇到了问题,无法让我的shell脚本正常工作。以下是我遇到问题的脚本的示例版本:\n
#!/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;
\n这个脚本的输出结果是:\n
sh-3.2$ ./test.sh Echo this | awk -F' ' '{print $1}' Echo
\n为什么使用变量作为命令的第一个反引号实际上没有执行完整的命令,而只返回第一个命令的输出以及第二个命令?我缺少某些东西来使第一个反引号执行命令吗?
问题的出现原因是在第一个命令中,使用了反引号(`)来执行eval命令,但是在执行过程中,由于反引号也被用作引用命令替换的符号,导致命令无法正确执行。
解决方法是将反引号(`)替换为$()形式的命令替换符号。
以下是修改后的代码:
#!/bin/sh ECHO_TEXT="Echo this" ECHO_CMD="echo ${ECHO_TEXT} | awk -F' ' '{print \$1}'" result="$(eval ${ECHO_CMD})" echo "$result" result="$(echo ${ECHO_TEXT} | awk -F' ' '{print $1}')" echo "$result"
希望对你有帮助!
问题:在shell脚本中使用反引号(backticks)出现问题的原因以及解决方法。
在shell脚本中,反引号(backticks)用于执行命令并将其结果赋值给变量。然而,有时候使用反引号时会出现问题。下面我们来分析一下问题的原因以及解决方法。
问题的原因在于,当使用反引号时,如果命令中包含变量或特殊字符,会导致解析出错。为了解决这个问题,我们需要使用eval
命令来执行带有反引号的命令。
解决方法如下:
将result=`eval ${ECHO_CMD}`;
替换为result=`${ECHO_CMD}`;
如果不使用eval
,那么下面的命令会被当作echo
的参数,并原样输出:
${ECHO_TEXT} | awk -F' ' '{print \$1}
而使用eval
后,该行命令将会被真正地执行。
在shell脚本中,使用反引号执行命令时,如果命令中包含变量或特殊字符,可能会导致解析错误。为了解决这个问题,我们需要使用eval
命令来执行带有反引号的命令。