この質問は私の以前の質問の一種の続編です。このサイトのユーザーはfor
、文字列値を反復処理するbash ループの作成方法を決定してくれました。たとえば、ループ制御変数fname
が文字列を反復処理するとします"a.txt" "b.txt" "c.txt"
。echo
「はい」にしたいです。when fname
が値"a.txt"
or "c.txt"
を持ち、echo
「no!」そうでなければ。次のbashシェルスクリプトを試しました。
#!/bin/bash
for fname in "a.txt" "b.txt" "c.txt"
do
echo $fname
if [ "$fname" = "a.txt" ] | [ "$fname" = "c.txt" ]; then
echo "yes!"
else
echo "no!"
fi
done
出力を取得します:
a.txt
番号!
b.txt
番号!
c.txt
はい!
値があるif
ときに、ステートメントが明らかにtrueを返すのはなぜですか?間違って使用しましたか?fname
"a.txt"
|
3
bashでは、「または」演算子は「||」です (Cスタイル)。
—
マリウスコトファナ
-o
同じ内で使用することもできます[ ]
。
@Thor は、4つ以上の引数をサポートすることが保証されていないという理由だけで、移植性のために好ん
—
jw013
||
で分離[ ]
します。もちろん、ターゲット言語であれば、誰も使用してはなりませんので、とにかくさんは、多くの点で優れています。-o
[
bash
[
bash
[[
@ jw013ありがとう。これは、私が使う
—
アンドリュー
if [[ "$fname" = "a.txt" ]] || [[ "$fname" = "c.txt" ]]
よりも使うべきだということif [ "$fname" = "a.txt" ] || [ "$fname" = "c.txt" ]
ですか?
@Andrew
—
jw013
bash
あなたがすでにしているように、シェバンをとして宣言している場合、それは正しいです。利点の1つ[[
は、単語の分割を行わない(特殊なケース)ため[[ $unquoted_var = string ]]
、安全であることです。