Unixで最後の戻り値を取得する

Unixで最後の戻り値を取得する

この問題について助けてください。

私はgrep test file.txtを実行しており、値全体をキャプチャして印刷したいと思います。私はこれをやっています。

grep test file.txt
if [ "$?" -eq 0]
then
echo success
else
echo fail
fi

このコードでは、grep が値を返すかどうかにかかわらず、終了コードは 0 で、コマンドが成功したことを示します。

実際のコードでgrepを10回ほど繰り返しましたが、うまくいかないので、次のことをしたくありません。

a=`grep test file.txt`
if [ "$a" -eq "" ]
then
echo fail
else
echo success
fi

私はこのような簡単な解決策を探しています。

echo $(anything) は値をキャプチャする必要があります。

ベストアンサー1

あなたの結果が私の結果と一致しません。

echo 'some test here' > file.txt
grep test file.txt
echo $?    # returns 0

echo 'something else here' > file.txt
grep test file.txt
echo $?    # returns 1

また、完全なコード例を実行すると、キーワードがファイルにあるかどうかに応じて「成功」または「失敗」が表示されます。 (0との間に空白がありません。]そうしないと、エラーが発生して-bash: [: missing `]'報告されなかったためです。)

grep test file.txt
if [ "$?" -eq 0 ]
then
    echo success
else
    echo fail
fi

grepただし、スタイル提案では、次のようにコマンドを直接テストします。

if grep test file.txt
then
    echo success
else
    echo fail
fi

grep...ブロックの後に戻り値を使用したいかもしれないと思いました。この場合は、値を保存して続行してください。iffi

grep test file.txt
ss=$?
if [ 0 -eq $ss ]
then
    echo success
else
    echo fail
fi
# Here $ss still contains the return value from grep

おすすめ記事