我正在编写一个 shell 脚本,curl 命令存储在一个变量中,如下所示:
str="curl 'http...'"
我正在使用
评估 $str
我想检查 this 的输出是否为空,这意味着它是否正在返回一些东西。我该如何检查这个?为什么我不能将输出存储在这样的变量中:
op=eval $str 为什么写这个会出错?提前致谢
我正在编写一个 shell 脚本,curl 命令存储在一个变量中,如下所示:
str="curl 'http...'"
我正在使用
评估 $str
我想检查 this 的输出是否为空,这意味着它是否正在返回一些东西。我该如何检查这个?为什么我不能将输出存储在这样的变量中:
op=eval $str 为什么写这个会出错?提前致谢
使用命令替换:
str="curl 'http...'"
op=$(eval "$str")
if [[ -n $op ]]; then
echo "Output is not null."
else
echo "Output is null.
fi
实际上而不是使用 eval 的更好方法是使用数组,因为它更安全:
cmd=("curl" "http://...")
op=$("${cmd[@]}")
if [[ -n $op ]]; then
echo "Output is not null."
else
echo "Output is null.
fi
分配数组时,将每个参数分隔为单个元素。如果需要引用以将参数保留为一个完整的参数,则可以选择任何引用方法,无论是使用单引号还是双引号。
顺便说一句,您只是遇到了一个错误,因为它不是调用您将获得输出的命令的正确方法。如前所述,您必须使用命令替换。一种称为流程替换的高级方法也可以应用,但对于需求来说并不实用。