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

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

回答

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 

コメント

  • -nを機能させるのに問題がある場合は、ウェブ上のいくつかの悪いガイド(たとえば、 GeeksforGeeks または TutorialsPoint )は、変数を引用しません。この回答とここにリンクされているガイドは、正しく引用しています。 引用せずに-nを使用すると、空であっても'空ではないことがわかります! @terdon、どうもありがとう!

回答

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

コメント

  • man [does ' GNU bashバージョン4.1.2(1)-リリース(x86_64- redhat-linux-gnu)。ただし、manテストの場合は+1です。
  • man test(常に?)は、外部プログラムバージョンのmanページを示します(GNU-coreutilsバージョンの場合は少なくとも)一部の(ほとんどのIME)シェルには異なる可能性のある組み込みバージョンがあることを明示的に警告します。

回答

terdonの回答を拡張するために、 Unix / Linux-チュートリアルポイントのシェル基本演算子には、ファイル関連の演算子(およびその他の便利な演算子)も含まれます。

-b file Checks if file is a block special file; if yes, then the condition becomes true. [ -b $file ] is false. -c file Checks if file is a character special file; if yes, then the condition becomes true. [ -c $file ] is false. -d file Checks if file is a directory; if yes, then the condition becomes true. [ -d $file ] is not true. -f file Checks if file is an ordinary file as opposed to a directory or special file; if yes, then the condition becomes true. [ -f $file ] is true. -g file Checks if file has its set group ID (SGID) bit set; if yes, then the condition becomes true. [ -g $file ] is false. -k file Checks if file has its sticky bit set; if yes, then the condition becomes true. [ -k $file ] is false. -p file Checks if file is a named pipe; if yes, then the condition becomes true. [ -p $file ] is false. -t file Checks if file descriptor is open and associated with a terminal; if yes, then the condition becomes true. [ -t $file ] is false. -u file Checks if file has its Set User ID (SUID) bit set; if yes, then the condition becomes true. [ -u $file ] is false. -r file Checks if file is readable; if yes, then the condition becomes true. [ -r $file ] is true. -w file Checks if file is writable; if yes, then the condition becomes true. [ -w $file ] is true. -x file Checks if file is executable; if yes, then the condition becomes true. [ -x $file ] is true. -s file Checks if file has size greater than 0; if yes, then condition becomes true. [ -s $file ] is true. -e file Checks if file exists; is true even if file is a directory but exists. [ -e $file ] is true. 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です