数日前から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
。