bashコマンドが見つからない

bashコマンドが見つからない

誰かが私を助けてくれるだろうかと思いました:

if [ -z $1 ]; then                                                                                                                                                                                                                                                             
  user=$(whoami)                                                                                                                                                                                                                                                         
else                                                                                                                                                                                                                                                                           
  if [ ! -d "/home/$1" ]; then                                                                                                                                                                                                                                           
    echo "Requested $1 user home directory doesn't exist."                                                                                                                                                                                                         
    exit 1                                                                                                                                                                                                                                                         
  fi                                                                                                                                                                                                                                                                     
  user=$1                                                                                                                                                                                                                                                                
fi 

私はいくつかの bash コマンドを勉強していたときに、-zと という2 つのコマンドを見-dました。これらのコマンドが何をするのかはわかっています (最初に空の変数をチェックし、2 番目にディレクトリの存在をチェックします)。私の質問は、これらのコマンドの説明をどうやって見つけるかということです (たとえば、man ページ -d/-z)。これらは if-else ステートメントでのみ使用できますか?

答え1

および-dはコマンドではなく、およびユーティリティ-zのオプションです。これらのユーティリティは に組み込まれており、マニュアルに記載されています。これらのユーティリティとこれらのフラグは POSIX によって標準化されているため、 だけでなく、どの POSIX シェルでも使用できます。test[bashbashbash

対話型セッションの場合は、 (も機能しますが、そのテキストは のドキュメントを参照するだけです)bashと入力すると、これらのユーティリティの組み込みバリアントのドキュメントを取得できます。help testhelp [test

man testman [動作するはずです。これらのマニュアルでは、外部のユーティリティ、おそらく および であり/bin/test/bin/[でデフォルトで使用するものではありませんbash

例えば、

! test -z "$dir" && test -d "$dir" && printf '%s is a directory' "$dir"

は、

! [ -z "$dir" ] && [ -d "$dir" ] && printf '%s is a directory' "$dir"

あるいは、

if ! test -z "$dir" && test -d "$dir"; then
    printf '%s is a directory' "$dir"
fi

そして

if ! [ -z "$dir" ] && [ -d "$dir" ]; then
    printf '%s is a directory' "$dir"
fi

( はおそらくまたは と! [ -z "$dir" ]記述されるのが一般的であり、上記のテストを使用したのは質問で言及されていたためであり、空の文字列に対するテストはいずれにしても失敗します)。[ ! -z "$dir" ][ -n "$dir" ]-z-d

参照:

関連情報