組み込みテストで-nと-zを使用する - Bash

組み込みテストで-nと-zを使用する - Bash

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、/を追加したかった(略語です。一貫性のために追加しました)。-ztest -n "$var"test "$var" != ''-z


1 技術的には、testほぼ[すべてのBourne様シェルに組み込まれていますが、POSIXでは必須ではなく、以前のバージョンのBourneシェルには組み込まれていません。 Almquistシェルには常に組み込みコマンドがありましたが、一部のBSDではこれを有効にしていないため、一部は2000年代まで/test組み込みされませんでした。[とにかく、特定のシェルに/コマンドが組み込まれているかどうかにかかわらず、すべてのPOSIXシステムにはファイルシステムに/コマンドもあります(これはシェルの/組み込みコマンドと同じように動作する場合もありません)。システム)。システム)。testsh[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))...)を置き換えるように設計されています。

おすすめ記事