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

答え2

spaceとの間に1つを追加すると、元のコードが期待どおりに機能するはずです。0]

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

答え3

grep test file.txt
if [ "$?" -eq 0]
then
  echo success
  exitcode=0
else
  echo fail
  exitcode=1 
fi
exit ${exitcode}

あなたが探しているものはわかりませんが、コマンドと同じコードでスクリプトを終了するには、grepこの方法が役立ちます。

他のものを探している場合は、自分についてもっと説明する必要があります。

答え4

戻りコードに依存するのではなく、awkを介してパイプすることが可能です。

grep posix test_file.txt|awk 'BEGIN{matches=0}{matches++}END{if(matches>0){print "success";}else{print "fail";}}'

最初の一致のみを印刷します。

grep testvalue test_file.txt|awk 'BEGIN{matches="";}{matches=$0;}END{if(matches!=""){print "success";print matches;}else{print "fail";}}'

そして、値キャプチャ機能によって各grepマッチを表示します。

grep testvalue test_file.txt|awk 'BEGIN{matches="";}{matches=matches $0 "\n";}END{if(matches!=""){print "success";print matches;}else{print "fail";}}'

関連情報