
誰かが私を助けてくれるだろうかと思いました:
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
[
bash
bash
bash
対話型セッションの場合は、 (も機能しますが、そのテキストは のドキュメントを参照するだけです)bash
と入力すると、これらのユーティリティの組み込みバリアントのドキュメントを取得できます。help test
help [
test
man test
もman [
動作するはずです。これらのマニュアルでは、外部のユーティリティ、おそらく および であり/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
参照: