所以我有以下小脚本并一直想知道..
#!/bin/bash
if [ -d $1 ]; then
echo 'foo'
else
echo 'bar'
fi
..为什么调用时会打印 foo没有参数?测试 [-d ] 对于空字符串返回 true 是怎么回事?
From: info coreutils 'test invocation'(通过找到的参考man test
):
如果省略 EXPRESSION,test' returns false. **If EXPRESSION is a
single argument,
如果参数为 null 且 true,则 test' 返回 false
否则**。参数可以是任何字符串,包括类似的字符串-d',
-1', --',
--帮助',以及--version' that most other programs
would treat as options. To get help and version information, invoke
the commands
[ --help' 和 `[ --version',没有通常的结束语
括号。
正确突出显示:
如果 EXPRESSION 是单个参数,则“test”返回 false
否则参数为 null 且为 true
所以每当我们这样做时[ something ]
它会返回true
如果说something
不为空:
$ [ -d ] && echo "yes"
yes
$ [ -d "" ] && echo "yes"
$
$ [ -f ] && echo "yes"
yes
$ [ t ] && echo "yes"
yes
看到第二个[ -d "" ] && echo "yes"
返回 false,你就得到了解决这个问题的方法:quote$1
以便-d
总是获取一个参数:
if [ -d "$1" ]; then
echo 'foo'
else
echo 'bar'
fi
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)