在shell脚本中检查curl命令的输出是否为null

时间:2013-09-23 04:18:51

标签: shell curl command-line null

我正在编写一个shell脚本,curl命令存储在这样的变量中:

str="curl 'http...'"

我正在使用

进行评估

eval $ str

我想检查一下这个输出是否为空,意味着它是否给我一些东西。我怎么检查这个? 为什么我不能将输出存储在这样的变量中:

op = eval $ str 为什么这个错误会给出错误? 提前致谢

1 个答案:

答案 0 :(得分:1)

使用命令替换:

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

分配数组时,将每个参数分隔为单个元素。您可以选择任何引用方法,无论是使用单引号还是双引号,如果需要引用以将参数保持为一个完整的参数。

顺便说一句,你只是犯了一个错误,因为它不是调用你得到输出的命令的正确方法。如上所述,您必须使用命令替换。一种称为过程替换的高级方法也可以适用,但它对于要求是不实际的。