找不到 bash 命令

Ped*_*ima 5 bash command

我想知道有人可以帮助我:

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 
Run Code Online (Sandbox Code Playgroud)

当我看到两个命令时,我正在研究一些 bash 命令:-z-d. 我知道他们做什么(首先检查空白变量,第二次检查存在目录)。我的问题是如何找到有关这些命令的描述(ig 手册页 -d/-z)。它们只能与 if-else 语句一起使用吗?

Kus*_*nda 9

-d-z不命令,但选择到test[公用事业。这些实用程序已内置bash并记录在bash手册中。这些实用程序和这些标志也恰好由 POSIX 标准化,因此它们可以在任何 POSIX shell 中使用,而不仅仅是bash.

如果您在交互式bash会话中,您可以通过键入help test(help [也可以,但其文本仅指 的文档test)来获取这些实用程序的内置变体的文档。

man testman [应该工作。这些手册描述了外部实用程序,可能/bin/test/bin/[,而不是您在bash.

例如,

! test -z "$dir" && test -d "$dir" && printf '%s is a directory' "$dir"
Run Code Online (Sandbox Code Playgroud)

完全等同于

! [ -z "$dir" ] && [ -d "$dir" ] && printf '%s is a directory' "$dir"
Run Code Online (Sandbox Code Playgroud)

或者,如果你愿意,

if ! test -z "$dir" && test -d "$dir"; then
    printf '%s is a directory' "$dir"
fi
Run Code Online (Sandbox Code Playgroud)

if ! [ -z "$dir" ] && [ -d "$dir" ]; then
    printf '%s is a directory' "$dir"
fi
Run Code Online (Sandbox Code Playgroud)

! [ -z "$dir" ]可能更常见的写法是[ ! -z "$dir" ]or [ -n "$dir" ],我只使用了-z上面的测试,因为问题中提到了它,-d无论如何,对空字符串的测试都会失败)。

也可以看看: