bash中的以下if语句之间有什么区别吗?
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
if [ -z "$debian_chroot" -a -r /etc/debian_chroot ]; then
我应该更喜欢哪个?这些“更好”吗?
bash中的以下if语句之间有什么区别吗?
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
if [ -z "$debian_chroot" -a -r /etc/debian_chroot ]; then
我应该更喜欢哪个?这些“更好”吗?
-a
并非在所有较旧的(POSIX 之前的)shell 中都可用,因此在尝试便携时您应该更喜欢&&
。
也就是说,如果你只支持 bash,请使用它的内置[[ ]]
工具,它允许&&
在测试内部而不是只在测试外部(并且,作为额外的奖励,使引用成为可选):
[[ -z $debian_chroot && -r /etc/debian_chroot ]]
另请参阅http://mywiki.wooledge.org/BashGuide/TestsAndConditionals
第一个是首选。请参阅POSIX 标准test
的“应用程序使用”部分了解内置原因。简而言之,-a
由于某些表达的含义不明确而被标记为过时的扩展。