Не могу найти команды 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и -d. Я знаю, что они делают (сначала проверяют на пустую переменную, а затем проверяют на существование каталога). Мой вопрос в том, как мне найти описания этих команд (например, man page -d/-z). Их можно использовать только с оператором if-else?

решение1

И -d-zэто не команды, а опции для утилит testи [. Эти утилиты встроены bashи документированы в bashруководстве. Эти утилиты и эти флаги также стандартизированы POSIX, поэтому они доступны в любой оболочке POSIX, а не только 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тест на пустой строке в любом случае не будет пройден).

Смотрите также:

Связанный контент