$(コマンド)$?終了コードを追加

$(コマンド)$?終了コードを追加

数日前からBashを学び始めました。

grep式の終了状態を次の変数にインポートしようとしています。

check=grep -ci 'text' file.sh

私が得た結果は次のとおりです。

No command '-ic' found

これを行うには、パイプコマンドを使用する必要がありますか?

ベストアンサー1

注文、

check=grep -ci 'text' file.sh

-ciシェルは、「引数をtext使用してコマンドを実行しfile.sh、変数をcheck環境の値に設定します」と解釈します。grep


シェルは、最後に実行されたコマンドの終了値を変数に保存します?。次のように、独自の変数のいずれかに対応する値を割り当てることができます。

grep -i 'PATTERN' file
check=$?

この値に基づいてアクションを実行するには、check変数を使用できます。

if [ "$check" -eq 0 ]; then
    # do things for success
else
    # do other things for failure
fi

あるいは、別の変数を使用してスキップして一緒にチェックする必要がある$?かもしれません。

if grep -q -i 'pattern' file; then
  # do things (pattern was found)
else
  # do other things (pattern was not found)
fi

(何も出力せず、一致時にすぐに終了するように-q指示しますgrep。ここで一致した項目には実際に興味がありません。)

または、パターンが現れたときに「仕事をする」ことを望む場合いいえ確立された:

if ! grep -q -i 'pattern' file; then
  # do things (pattern was not found)
fi

$?後で使用する必要がある場合にのみ値を$?上書きした場合は、次のような他の変数に保存する必要がありますか?

mkdir "$dir"
err=$?

if [ "$err" -ne 0 ] && [ ! -d "$dir" ]; then
    printf 'Error creating %s (error code %d)\n' "$dir" "$err" >&2
    exit "$err"
fi

上記のコードスニペットでは$?テスト結果が適用されます[ "$err" -ne 0 ] && [ ! -d "$dir" ]。表示して使用する必要がある場合にのみここに保存してくださいexit

おすすめ記事