grepはtrue / falseを返すことができますか?それとも別の方法がありますか?

grepはtrue / falseを返すことができますか?それとも別の方法がありますか?

このスクリプトの一部として与えられた最初の引数がファイルの最初の単語と一致することを確認できるはずです。その場合はエラーメッセージで終了し、そうでない場合はパラメータをファイルに追加します。その文を書く方法は理解していますが、スクリプトで使用するif方法はわかりません。grep私もgrepこんな感じです。

grep ^$1 schemas.txt

私はこれが私がしたよりもはるかに簡単になると思います。

文に「パラメータが多すぎます」というエラーが表示されますif。スペースを削除したgrep -q後、バイナリ演算子に対して予期されるエラーが発生しました。

if [ grep -q ^$1 schemas.txt ]
then
        echo "Schema already exists. Please try again"
        exit 1
else
        echo "$@" >> schemas.txt
fi

ベストアンサー1

grep何かが見つかった場合(0)と何も見つからない場合(0ではない)は、別の終了コードを返します。ifステートメント内では、ゼロ出口コードは「true」にマップされ、ゼロ以外の出口コードはfalseにマップされます。 grepには、-q一致するテキストを出力せずに終了ステータスコードのみを返すパラメータがあります。

したがって、次のようにgrepを使用できます。

if grep -q PATTERN file.txt; then
    echo found
else
    echo not found
fi

簡単に言えば、このようなタスクを実行すると、これが実際にgrepのように実行されているコマンドであることがif [ -z "$var" ]…わかります。[私のシステムでは/usr/bin/[。同様に動作し、[true に対して 0 終了コードを返し、false に対して 0 以外の終了コードを返します。 (結論を除いてtestと同じ)[]

おすすめ記事