これは、シェル(bash、dash)プロンプトで機能します。
[ -z "" ] && echo A || echo B
A
ただし、私はPOSIXシェルスクリプトを記述しようとしています。
#!/bin/sh
[ "${#}" -eq 1 ] || echo "Invalid number of arguments, expected one."; exit 1
readonly raw_input_string=${1}
[ -z "${raw_input_string}" ] && echo "The given argument is empty."; exit 1
理由はわかりませんが、メッセージが表示されません:
指定された引数は空です。
このようなスクリプトを呼び出すと:
./test_empty_argument ""
何故ですか?
5
変数が空であるか、スペースのみが含まれているかどうかをテストするにはどうすればよいですか?を参照してください 変数が空であるか、設定されていないか、または空白のみが含まれているかをテストする方法。この質問の問題はそれとは何の関係もありません。
—
-ilkkachu
使用するだけ
—
user2497
if [ X”” = X”$var” ] ; then echo isempty ; fi
@ user2497過去20年間にリリースされたシェルでそれを使用する理由はありません。これは、古いバグのあるシェルの回避策です。
—
-chepner
@chepnerだから、それは有効な解決策ではありませんか?他の何かを使用する必要がありますか?
—
user2497
[ "" = "$var" ]
うまくいくでしょう。引用された空の文字列は、の引数リストから削除されません[
。しかし、それ[ -z "$var" ]
も必要ありません。これもうまく機能するからです。