私はこれを行う必要があります:
if [ $X != "dogs" and "birds" and "dogs" ]
then
echo "it's is a monkey"
fi
bash スクリプトで。どうやって進める?
私はこれを行う必要があります:
if [ $X != "dogs" and "birds" and "dogs" ]
then
echo "it's is a monkey"
fi
bash スクリプトで。どうやって進める?
&&
各オプションを個別の条件式に変換し、それらを(AND) 演算子で結合する必要があります。
if [[ $X != dogs && $X != birds && $X != cats ]]; then
echo "'$X' is not dogs or birds or cats. It must be monkeys."
fi
単一の[
...]
でこれを行うこともできますが、比較ごとに個別のセットを使用し、 and 演算子をそれらの外に移動する必要があります。
if [ "$X" != dogs ] && [ "$X" != birds ] && [ "$X" != cats ]; then
...
fi
のような単一単語の文字列を二重引用符で囲む必要はありませんが、パラメーターの値にスペースがあると構文エラーが発生するため、単一ブラケット バージョン内のdogs
ようにパラメーター展開 (変数) を二重引用符で囲む必要があることに注意してください。$X
引用符なしで。
X
また、シェル スクリプトのように大文字の変数名を使用する必要はありません。これは、環境から入ってくる変数などのために予約するのが最適$PATH
です$TERM
。
OR のシェル演算子バージョンは で||
、同じように機能します。
あなたも違うと思うことができます...
if ! [[ $X == dogs || $X == birds || $X == cats ]]; then
echo "'$X' is not dogs or birds or cats... It could be monkeys."
fi
考えているように:
それは犬でも猫でも鳥でもありません
考えることとまったく同じではありません
犬でも猫でも鳥でもありません。
これにより、のアプローチがcase
より明確になります。うまくいけば、この場合、これを行う正しい方法は次のとおりです。
case $X in
dogs )
# There may be some part of code
;;
birds )
# There may be some other part
;;
cats )
# There is no need to be something at all...
;;
* )
echo "'$X' is not dogs or birds or cats... It could be monkeys."
;;
esac
または、鳥、猫、犬の場合を処理する必要が本当にない場合:
case $X in
dogs|birds|cats ) ;;
* )
echo "'$X' is not dogs or birds or cats... It could be monkeys."
;;
esac
$X を複数回配置する必要を回避するために Bash で考えることができる唯一の方法は、RegEx を使用することです。
if [[ ! "$X" =~ (dogs|birds|cats) ]]; then
echo "it's is a monkey"
fi
同様に、簡単に言えば:
[[ ! "$X" =~ (dogs|birds|cats) ]] && echo "it's is a monkey"
これは、変数が非常に長い場合や、比較が非常に短い場合に役立ちます。
特殊文字をエスケープすることを忘れないでください。
X=$1;
if [ "$X" != "dogs" -a "$X" != "birds" -a "$X" != "dogs" ]
then
echo "it's is a monkey"
fi
あなたがすでに持っていたものに最も近い