コマンドの出力とその戻り値をシェル スクリプトの変数にキャプチャする方法はありますか?

StackOverflow https://stackoverflow.com/questions/1746273

  •  20-09-2019
  •  | 
  •  

質問

それで、私にコマンドがあるとしましょう。 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

とにかくそれを簡素化することはできますか?

役に立ちましたか?

解決

この?

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

ところで、$()とバッククォートは、をすることを意味し、同じ効果のための2つの構文は、唯一の

書き込みをしたいです
$(`foo`)

fooは、あなたが再び実行するコマンドのテキストを出力した場合。同様ます:

foo()
{
  echo echo date
}
$(foo)
$(`foo`)

他のヒント

output=`foo`
echo "Return: $?" # $? is the return code

バッシュから:(最初の列の最初の $ が私のプロンプトであることに注意してください)

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

使用しないでください $() バッククォートを追加すると、実際にコマンドが実行され、その出力が実行されます。

以下も参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top