1. 程式人生 > >shell中[ ]和[[ ]]命令的區別

shell中[ ]和[[ ]]命令的區別

spa ech [ ] 判斷 條件 div 移除 shell 的區別

1.在[[ ]]中不會進行word splitting和filename expansion,而在[ ]中會進行,當變量a為空時,[ -n $a ]和[ -z $a ]都會返回0,這不是我們期望的結果,原因在於進行參數展開($a)後,會進行word splitting,而a為空,word splitting會移除空值,所以[ -n $a ]和[ -z $a ]實際是執行[ -n ]和[ -z ],而[ ]中僅一個參數時且非空都是返回0的,所以 使用[ ]進行條件判斷時,最好加上引號

buddy@buddy-PC:~$ a="1 2"
buddy@buddy-PC:~$ [ -n $a ]
bash: [: 
1: 需要二元表達式 buddy@buddy-PC:~$ [[ -n $a ]] buddy@buddy-PC:~$ [ -n "$a" ] buddy@buddy-PC:~$ a= buddy@buddy-PC:~$ buddy@buddy-PC:~$ [ -n $a ] buddy@buddy-PC:~$ echo $? 0 buddy@buddy-PC:~$ [ -z $a ] buddy@buddy-PC:~$ echo $? 0 buddy@buddy-PC:~$ [[ -n $a ]] buddy@buddy-PC:~$ echo $? 1 buddy@buddy
-PC:~$ [[ -z $a ]] buddy@buddy-PC:~$ echo $? 0 buddy@buddy-PC:~$

buddy@buddy-PC:~$ [[ -n ]]
bash: 一元條件運算符使用了未預期的參數 `]]‘
bash: `]]‘ 附近有語法錯誤
buddy@buddy-PC:~$ [ -n ]
buddy@buddy-PC:~$

shell中[ ]和[[ ]]命令的區別