BashスクリプトのOR演算子

BashスクリプトのOR演算子

このコードはエラーを生成します行3:[:`]'がありません。では、なぜこのエラーが発生するのですか?

#!/bin/bash
read x
if [ $x == "Y" ] || [ $x == "y"]
then
   echo "YES"
else
   echo "NO"
fi

よろしくお願いします。

答え1

「と」の間にスペースを追加する必要があります。

$ ./test.sh
Y
YES

$ cat test.sh
#!/bin/bash 
read x
if [ $x == "Y" ] || [ $x == "y" ] 
then
    echo "YES"
else
    echo "NO"
fi

乾杯。

答え2

開き括弧は[実際にはコマンドです(シェル組み込みとしても使用できますが、話は異なります)。

$ which [
/usr/bin/[

シェルは指定されたオプションでこのコマンドを実行します。あなたの場合は、、、および4つのオプションを持つ通貨が1つあり$x、、、および3つのオプションを持つ別の通貨があります。これは、シェルがコマンドやその他のコマンドのオプションを区別するためにスペースを使用するためです。引用符(")は渡されませんが、シェル内の特定の文字の特別な意味を「エスケープ」するために使用されます(たとえば、コマンドにスペースを渡す必要がある場合など)。==Y]$x==y]

[この時点で、シェルは角かっこ(そしてそれらの間のすべて)で完成し、いくつかの便利な作業を行うことはコマンドに依存します。最後の引数として[期待されるようにプログラムされています(明らかな理由のために、asを呼び出すときに同じコマンドに別の名前は必要ありません)。空白がないため見つかりませんし、文句を言います。]test]][

答え3

二重中括弧を使用し、変数を「」で囲む必要があります。

#!/bin/bash
read x;
if [[ "$x" = "Y" ||  "$x" = "y" ]];  then
   echo "YES"
else
   echo "NO"
fi;

しかし、私は以下を使用することを好みます。

echo $x |tr '[A-Z]' '[a-z]'

if文よりはるかに優れています。

関連情報