0

私は次のコードを書いています:

if [ $opt -ge $max -o $opt -le  0 ]
then
    echo "Bad";
else
    echo "Good";
    if [ $opt = "\" -o $opt = "/"  ]
    then
        echo "Good";
    else
        echo "Invlaid"; //Line number 21
    fi
fi //Line number 23 no Line number 24.

これはエラーを示しています:

./file.sh: line 21: unexpected EOF while looking for matching `"'
./file.sh: line 24: syntax error: unexpected end of file

このコードを配置すると:

if [ $opt -ge $max -o $opt -le  0 ]
then
    echo "Bad";
else
    echo "Good";
fi //Line number 23 no Line number 24.

その後、エラーはありません。私は問題を理解することができません。

4

3 に答える 3

3

"\" を記述した場所は、最初の文字が二重引用符である文字列リテラルを開始します。文字列にバック スラッシュを含めるには、別のバック スラッシュを前に付ける必要があります。

"\\"
于 2013-07-26T05:55:41.407 に答える
1

二重引用符内のバックスラッシュ\はエスケープする必要があります。それ以外の場合は、次のように単一引用符を使用できます

if [ $opt = '\' -o $opt = '/' ]; then
   echo "Good"
fi

一重引用符は、ラップされた文字列を文字通りに扱います。これが、シェルの一重引用符をエスケープできない正確な理由です。

于 2013-07-26T06:03:32.223 に答える