変数が空であるか空白のみが含まれているかどうかをテストする方法は?

変数が空であるか空白のみが含まれているかどうかをテストする方法は?

次の bash 構文はparam空でないことを確認します。

 [[ !  -z  $param  ]]

たとえば、

param=""
[[ !  -z  $param  ]] && echo "I am not zero"

出力できませんが大丈夫です。

ただし、param1つ以上の空白文字を除いて空白の場合、状況は異なります。

param=" " # one space
[[ !  -z  $param  ]] && echo "I am not zero"

「私はゼロではない」を出力します。

空白文字のみを含む変数を空白として扱うようにテストをどのように変更できますか?

ベストアンサー1

まず注意事項-zテスト明示的に使用される用途:

文字列の長さは0です。

つまり、スペースのみを含む文字列はいいえ-z長さがゼロではないため、次は真です。

必要なのは、以下を使用して変数からスペースを削除することです。パターン置換パラメータの拡張:

[[ -z "${param// }" ]]

これはparam変数を拡張し、パターンのすべての発生(空白1つ)を何でも置き換えるため、空白のみの文字列は空の文字列に展開されます。


これ仕組みの本質${var/pattern/string}最初に最も長い一致を次に置き換えます。 (上記のように)起動すると置き換えられます。patternstringpattern/みんな大会。代替項目が空であるため、最終値/string値を省略できます。

${パラメータ/パターン/文字列}

これ模様ファイル名拡張と同様に、パターンを生成するために拡張されます。範囲拡張され、最も長い一致模様その値は次のように置き換えられます。ひも。もし模様「/」で始まるすべての一致模様に置き換えられますひも。通常、最初の発生のみが置き換えられます。 ...もしひも空、一致模様削除されたおよび/または下模様省略可能です。

最後に、私たちは${param// }すべてのスペースを削除しました。

ksh(オリジナル)とにありますが、zshこのbash構文はPOSIXではないため、shスクリプトに使用しないでください。

おすすめ記事