0

bash中的以下if语句之间有什么区别吗?

if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
if [ -z "$debian_chroot" -a  -r /etc/debian_chroot ]; then

我应该更喜欢哪个?这些“更好”吗?

4

2 回答 2

3

-a并非在所有较旧的(POSIX 之前的)shell 中都可用,因此在尝试便携时您应该更喜欢&&

也就是说,如果你只支持 bash,请使用它的内置[[ ]]工具,它允许&& 测试内部而不是只在测试外部(并且,作为额外的奖励,使引用成为可选):

[[ -z $debian_chroot && -r /etc/debian_chroot ]]

另请参阅http://mywiki.wooledge.org/BashGuide/TestsAndConditionals

于 2013-05-16T13:27:58.827 回答
3

第一个是首选。请参阅POSIX 标准test的“应用程序使用”部分了解内置原因。简而言之,-a由于某些表达的含义不明确而被标记为过时的扩展。

于 2013-05-16T13:28:20.533 回答