Bashスクリプトは、「if」ステートメントに条件付き「or」を使用します。

Bashスクリプトは、「if」ステートメントに条件付き「or」を使用します。

この質問は私の質問の後継です。前の質問。このサイトのユーザーは、for文字列値を繰り返すbashループを作成する方法を見つけるのに親切に役立ちました。たとえば、ループ制御変数がfname文字列を繰り返すとします"a.txt" "b.txt" "c.txt"。値がある場合はecho「はい!」が欲しく、そうでなければ「いいえ!」が必要です。次のbashシェルスクリプトを試しました。fname"a.txt""c.txt"echo

#!/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このステートメントに値がありますが、なぜ明らかに真になるのですか?私が間違って使用したのでしょうか?fname"a.txt"|

ベストアンサー1

言いたい場合は、ORダブルパイプ(||)を使用してください。

if [ "$fname" = "a.txt" ] || [ "$fname" = "c.txt" ]

(もともと使用されたOPコードは、|通常のパイプが動作するのと同じ方法で出力を左から右に単にパイプしました。)


長年のコメントと誤解の終わりに、私は明確に説明します。

ORあなたの使用のために||

使用するかどうかは[状況[[によって異なりますtest((すべての状況で、どちらかが好ましいと言うのは間違っています。時には[当たる時もあり、[[間違った時もあります。しかし、それは問題ではありません。 OPはなぜ|動作しないのか尋ねました。答えはその||逆でなければならないからです。

おすすめ記事