Bash 中單方括號和雙方括號的區別
本教程解釋了 Bash 中的單方括號和雙方括號及其區別。
Bash 中的單方括號 [ ]
單方括號 [
是 Bash shell 中 test
命令的另一個名稱。test
命令是所有 POSIX shell 中的標準實用程式。 ]
是 [
的最後一個引數。
下面的兩個指令碼表明 [
和 test
命令是相似的。第一個指令碼使用單方括號檢查變數 $y
中的值是否大於變數 $x
中的值並根據 test
命令中的評估返回的結果列印輸出.
在我們的例子中,$y
變數的值大於 $x
變數的值。
#!/bin/bash
x=2
y=3
if [ $y -gt $x ]
then
echo "$y is greater than $x"
else
echo "$x is greater than $y"
fi
該指令碼在執行時將以下訊息列印到標準輸出。
3 is greater than 2
該指令碼使用 test
命令而不是單個方括號。該指令碼檢查 $y
變數中的值是否大於 $x
變數中的值。
如果 test
返回 true,指令碼執行第一個 echo
命令,如果 test
返回 false,它執行 else
部分中的 echo
命令。
在我們的例子中,$y
變數的值比 $x
變數 2 大 3。指令碼將執行第一個 echo
命令。
#!/bin/bash
x=2
y=3
if test $y -gt $x
then
echo "$y is greater than $x"
else
echo "$x is greater than $y"
fi
該指令碼將以下輸出列印到標準輸出。
3 is greater than 2
Bash 中的雙方括號 [[ ]]
雙方括號 [[]]
擴充套件了從 ksh88
採用的 test
命令;它更加通用。雙方括號可用於模式匹配、引數擴充套件,它們不允許分詞。
使用雙方括號有助於避免 Bash 指令碼中的邏輯錯誤。在雙方括號中,&&
、||
、<
和 >
運算子在 test
命令中給出錯誤時起作用。
我們在下面的指令碼中使用方括號進行算術評估。雙方括號測試 $x
變數中的值是否等於 $y
變數中的值。
測試返回 true 並執行指令碼中的第一個 echo
命令。
#!/bin/bash
x=10
y=10
if [[ $x -eq $y ]]
then
echo "\$x is equal to \$y"
else
echo "\$x is not equal to \$y"
fi
執行指令碼會在標準終端中產生以下輸出。
$x is equal to $y
Bash 中單方括號和雙方括號的區別
test
命令是標準 POSIX shell 上的內建 Bash 實用程式,而雙方括號不是命令。雙方括號是 Bash 中的擴充套件,改編自用作關鍵字的 ksh88
。
與 test
命令相比,雙方括號支援更多功能。與 test
命令不同,它支援模式匹配和引數擴充套件,並且不允許分詞。