所以我有以下小脚本并不断疑惑..
#!/bin/bash
if [ -d $1 ]; then
echo 'foo'
else
echo 'bar'
fi
Run Code Online (Sandbox Code Playgroud)
..为什么在没有参数的情况下打印foo ?对于空字符串,test [-d]如何返回true?
来自:(info coreutils 'test invocation'
通过 找到的参考man test
):
如果省略 EXPRESSION,
test' returns false. **If EXPRESSION is a single argument,
则如果参数为 null ,则test' 返回 false,否则返回 true**。参数可以是任何字符串,包括像-d',
-1'、----',
help' 和--version' that most other programs would treat as options. To get help and version information, invoke the commands
[ --help' 和 `[ --version'这样的字符串 ,没有通常的右括号。
正确突出显示:
如果 EXPRESSION 是单个参数,如果参数为 null,`test' 返回 false,否则返回 true
所以每当我们这样做时[ something ]
,true
如果它something
不为空,它就会返回:
$ [ -d ] && echo "yes"
yes
$ [ -d "" ] && echo "yes"
$
$ [ -f ] && echo "yes"
yes
$ [ t ] && echo "yes"
yes
Run Code Online (Sandbox Code Playgroud)
看到第二个[ -d "" ] && echo "yes"
返回false,你就有了解决这个问题的方法:quote$1
这样-d
总是得到一个参数:
if [ -d "$1" ]; then
echo 'foo'
else
echo 'bar'
fi
Run Code Online (Sandbox Code Playgroud)