127

文字列がスペースでも空でもないかどうかを確認する次のシェルスクリプトを実行しようとしています。ただし、上記の 3 つの文字列すべてに対して同じ出力が得られます。「[[」構文も使用してみましたが、役に立ちませんでした。

これが私のコードです:

str="Hello World"
str2=" "
str3=""

if [ ! -z "$str" -a "$str"!=" " ]; then
        echo "Str is not null or space"
fi

if [ ! -z "$str2" -a "$str2"!=" " ]; then
        echo "Str2 is not null or space"
fi

if [ ! -z "$str3" -a "$str3"!=" " ]; then
        echo "Str3 is not null or space"
fi

次の出力が得られます。

# ./checkCond.sh 
Str is not null or space
Str2 is not null or space
4

6 に答える 6

156

の両側にスペースが必要です!=。コードを次のように変更します。

str="Hello World"
str2=" "
str3=""

if [ ! -z "$str" -a "$str" != " " ]; then
        echo "Str is not null or space"
fi

if [ ! -z "$str2" -a "$str2" != " " ]; then
        echo "Str2 is not null or space"
fi

if [ ! -z "$str3" -a "$str3" != " " ]; then
        echo "Str3 is not null or space"
fi
于 2012-11-22T09:40:50.393 に答える
79

シェルで空文字列をチェックするため

if [ "$str" == "" ];then
   echo NULL
fi

また

if [ ! "$str" ];then
   echo NULL
fi
于 2012-11-22T09:37:22.397 に答える
19

単一のスペースだけでなく、任意の量の空白をチェックする必要がある場合は、次のようにすることができます。

余分な空白の文字列を削除するには (中間の空白も 1 つのスペースに凝縮します):

trimmed=`echo -- $original`

により、 echo によって認識されるスイッチが含まれ--ている場合$originalでも、それらがエコーされる通常の引数と見なされることが保証されます。""また、前後に配置しないことも重要です。そうし$originalないと、スペースが削除されません。

その後、$trimmed空かどうかを確認できます。

[ -z "$trimmed" ] && echo "empty!"
于 2012-11-22T09:43:30.560 に答える
8

文字列が空であるか、空白のみが含まれているかどうかを確認するには、次を使用できます。

shopt -s extglob  # more powerful pattern matching

if [ -n "${str##+([[:space:]])}" ]; then
    echo '$str is not null or space'
fi

Bash マニュアルの「シェル パラメータの展開パターン マッチング」を参照してください。

于 2012-11-22T09:41:17.503 に答える