シェルスクリプト:-zおよび-nオプションとif


54

次の行if [ -z "$xyz" ]とがあるシェルスクリプトがありますif [ -n "$abc" ]が、それらの目的はわかりません。誰でも説明できますか?

回答:


64

ここで、bashの演算子に関する非常に良いリファレンスを見つけることができます。別のシェルを使用している<my shell> operators場合は、検索するだけで必要なものがすべて見つかります。あなたの特定のケースでは、次を使用しています:

-n
   string is not null.

-z
  string is null, that is, has zero length

説明する:

$ foo="bar";
$ [ -n "$foo" ] && echo "foo is not null"
foo is not null
$ [ -z "$foo" ] && echo "foo is null"
$ foo="";
$ [ -n "$foo" ] && echo "foo is not null"
$ [ -z "$foo" ] && echo "foo is null"
foo is null

3

man testまたはman [、コマンドをテストするためのすべてのオプションを提供します。この場合、-nは$ abcのコンテンツの長さがゼロ以外かどうかをテストし、-zは$ xyzのコンテンツが長さゼロの文字列かどうかをテストします。


man [GNU bashバージョン4.1.2(1)-release(x86_64-redhat-linux-gnu)では動作しません。しかし、人テストでは+1。
アンドリューロリアン

1
man test(常に?)は、外部プログラムバージョンのマニュアルページを提供します。(少なくともGNU-coreutilsバージョンの場合)一部の(IMEの)シェルには異なるバージョンが組み込まれていることを明示的に警告します。
dave_thompson_085
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.