web-dev-qa-db-ja.com

シェルスクリプトで文字列が空でもスペースでもないか確認する

文字列がスペースでも空でもないかどうかを確認する次のシェルスクリプトを実行しようとしています。ただし、上記の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
77

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

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
101
dogbane

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

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

OR

if [ ! "$str" ];then
   echo NULL
fi
54
RajeshKashyap

単一のスペースだけでなく、任意の量の空白に対してチェックする必要がある場合、これを行うことができます:

余分な空白の文字列を削除するには(中央の空白も1つの空白に制限します):

trimmed=`echo -- $original`

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

その後、$trimmedが空かどうかを確認するだけです。

[ -z "$trimmed" ] && echo "empty!"
16
hyde

文字列にスペース以外の何かがあるかどうかの別の簡単なテスト。

if [[ -n "${str// /}" ]]; then
    echo "It is not empty!"
fi

「-n」は、長さがゼロ以外の文字列を意味します。

次に、最初の2つのスラッシュは、以下のすべてallに一致することを意味します。この場合はスペースです。次に、3番目のスラッシュの後に置換(空の)文字列が続き、「}」で閉じられます。通常の正規表現構文との違いに注意してください。

bashシェルスクリプトの文字列操作 について詳しく読むことができます。

7
elomage

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

shopt -s extglob  # more powerful pattern matching

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

Bashマニュアルの Shell Parameter Expansion および Pattern Matching を参照してください。

6
Eugene Yarmash
[ $(echo $variable_to_test | sed s/\n// | sed s/\ //) == "" ] && echo "String is empty"

文字列からすべての改行とスペースを削除すると、空の文字列がテストされて対処できる空白になります

1
Harsh Shandilya