我想知道有人可以帮助我:
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
。我知道他们做什么(首先检查空白变量,第二次检查是否存在目录)。我的问题是如何找到有关这些命令的描述(ig 手册页 -d/-z)。它们只能与 if-else 语句一起使用吗?
答案1
和不是命令,而是-d
和实用程序的选项。这些实用程序已内置并记录在手册中。这些实用程序和这些标志也恰好由 POSIX 标准化,因此它们可以在任何 POSIX shell 中使用,而不仅仅是.-z
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" ]
or [ -n "$dir" ]
,我只使用了-z
上面的测试,因为问题中提到了它,-d
对空字符串的测试无论如何都会失败)。
也可以看看: