この問題について助けてください。
私は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
...ブロックの後に戻り値を使用したいかもしれないと思いました。この場合は、値を保存して続行してください。if
fi
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";}}'