Bashでは、次の点を考慮してください。
root@debian-lap:/tmp I=$(echo)
root@debian-lap:/tmp echo "$I"
root@debian-lap:/tmp [ -z "$I" ] && echo "TRUE" || echo "FALSE"
TRUE
これは変数$ Iがあることを意味しますzero
。変数がゼロでないことを確認し、!
変数をチェックするようにテストを元に戻すために、否定的なテストを使用して同じ結果を得ることができます。zero
root@debian-lap:/tmp ! [ -n "$I" ] && echo "TRUE" || echo "FALSE"
TRUE
root@debian-lap:/tmp
だから私の質問は基本的に同じテストを実行するので、使用する-z
特別なケースはありますか、! -n
その逆の場合はありますか?! -z
-n
ありがとう
ベストアンサー1
1. [ -z "$var" ]
2. [ ! -n "$var" ]
3. ! [ -n "$var" ]
4. [ ! "$var" ]
5. [ "$var" = '' ]
6. [ ! "$var" != '' ]
7. [ '' = "$var" ]
...²
この機能はPOSIXシェルと同じです。 Bourneシェルにはキーワードがないため、上記の3はサポートされていません!
。$var
=
-n
!
他の多くのシェルにも同様のエラーがあります)。
[ "$a" = "$b" ] && [ "$x" = "$y" ]
同様に、廃止され信頼できない代わりに使用でき、使用する必要があります[ "$a" = "$b" -a "$x" = "$y" ]
。
3 の 1 つは!
POSIX シェル関数です。test
/utilityは、それを使用して独自の演算子をサポートするために条件を無効にしたい他のシェルまたは非シェルアプリケーションにはまだ意味があります[
(2/6に示す)。!
このtest
ユーティリティはUnix v7で導入されました。以前は、、、、/if
があるユーティリティが!
ありましたが/はありませんでした。=
!=
-a
-o
-n
-z
便宜上-n
、/を追加したかった(略語です。一貫性のために追加しました)。-z
test -n "$var"
test "$var" != ''
-z
1 技術的には、test
ほぼ[
すべてのBourne様シェルに組み込まれていますが、POSIXでは必須ではなく、以前のバージョンのBourneシェルには組み込まれていません。 Almquistシェルには常に組み込みコマンドがありましたが、一部のBSDではこれを有効にしていないため、一部は2000年代まで/test
組み込みされませんでした。[
とにかく、特定のシェルに/コマンドが組み込まれているかどうかにかかわらず、すべてのPOSIXシステムにはファイルシステムに/コマンドもあります(これはシェルの/組み込みコマンドと同じように動作する場合もありません)。システム)。システム)。test
sh
[
test
[
test
[
test
²これは、変数が空の文字列であるかどうかをテストするために使用できる唯一のコマンドではありません。
case $var in
"") ...
esac
コマンドを実行しない方法です。
expr "x$var" : 'x$' > /dev/null
${var:+"false"}
awk 'BEGIN{exit(ARGV[1] != "")}' "$var"
[ "${#var}" -eq 0 ]
複雑な方法の例が多くあります。
Kornなどの一部のシェルにはbash
条件付きおよび算術機能が組み込まれています。構造[
コマンド([[ -z $var ]]
、((${#var} == 0))
...)を置き換えるように設計されています。