代码之家  ›  专栏  ›  技术社区  ›  supercheetah

有没有办法将命令的输出及其返回值捕获到shell脚本中的变量中?

  •  0
  • supercheetah  · 技术社区  · 15 年前

    foo ,在一个脚本中,它既有一个返回值,又有一个我感兴趣的输出字符串,我想将它们存储到一个变量中(至少它的输出可以用于变量,它的返回值可以用于条件)。

    例如:

    a=$(`foo`)   # this stores the output of "foo"
    if foo; then # this uses the return value
        stuff...
    fi
    

    if foo > $tmpfile; then
        a=$(`cat $tmpfile`)
        stuff...
    fi
    

    有没有我可以简化的方法?

    3 回复  |  直到 13 年前
        1
  •  4
  •   just somebody    15 年前

    out=$(cmd)
    rv=$?
    if test $rv -eq 0; then
      echo "all good"
      echo $out
    else
      echo "wtf, exit code was $rv"
    fi
    

    顺便说一句,$()和backticks是两个具有相同效果的语法,这意味着 只有 想写作吗

    $(`foo`)
    

    如果 foo 输出要再次执行的命令的文本。比如:

    foo()
    {
      echo echo date
    }
    $(foo)
    $(`foo`)
    
        2
  •  3
  •   scotchi    15 年前
    output=`foo`
    echo "Return: $?" # $? is the return code
    
        3
  •  2
  •   Roger Pate Roger Pate    15 年前

    $ A=$(echo abc; false); echo status:$? A:$A
    status:1 A:abc
    

    不要使用 $() 加上反勾号,因为它实际执行命令,然后执行其输出。

    另见: