文字列がスペースでも空でもないかどうかを確認する次のシェルスクリプトを実行しようとしています。ただし、上記の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
!=
の両側にスペースが必要です。コードを次のように変更します。
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
シェルで空の文字列をチェックするため
if [ "$str" == "" ];then
echo NULL
fi
OR
if [ ! "$str" ];then
echo NULL
fi
単一のスペースだけでなく、任意の量の空白に対してチェックする必要がある場合、これを行うことができます:
余分な空白の文字列を削除するには(中央の空白も1つの空白に制限します):
trimmed=`echo -- $original`
--
により、$original
にエコーで認識されるスイッチが含まれている場合でも、エコーされる通常の引数と見なされます。また、""
を$original
の周りに置かないことが重要です。そうしないと、スペースが削除されません。
その後、$trimmed
が空かどうかを確認するだけです。
[ -z "$trimmed" ] && echo "empty!"
文字列にスペース以外の何かがあるかどうかの別の簡単なテスト。
if [[ -n "${str// /}" ]]; then
echo "It is not empty!"
fi
「-n」は、長さがゼロ以外の文字列を意味します。
次に、最初の2つのスラッシュは、以下のすべてallに一致することを意味します。この場合はスペースです。次に、3番目のスラッシュの後に置換(空の)文字列が続き、「}」で閉じられます。通常の正規表現構文との違いに注意してください。
bashシェルスクリプトの文字列操作 について詳しく読むことができます。
文字列が空であるか、空白のみが含まれているかどうかを確認するには、次を使用できます。
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 を参照してください。
[ $(echo $variable_to_test | sed s/\n// | sed s/\ //) == "" ] && echo "String is empty"
文字列からすべての改行とスペースを削除すると、空の文字列がテストされて対処できる空白になります