在 Bash 腳本里,中括號 [ ] 其實是 test 命令的同義詞,[ 是一個命令,] 是該命令的最后一個參數,所以中括號內外的空格會影響命令執行,下面詳細說明:
中括號內側空格
中括號內側與操作數之間必須有空格,若缺少空格,Bash 會把操作數和中括號視為一個整體,從而導致命令執行出錯。
錯誤示例:
#!/bin/bash
git_app="abc"
if ["$git_app" = "abc"]; thenecho "帶參數編譯"
elseecho "原生編譯"
fi
執行上述腳本會報錯,Bash 會把 [“$git_app” 當作一個命令,由于該命令不存在,就會提示找不到命令。
正確示例:
#!/bin/bash
git_app="abc"
if [ "$git_app" = "abc" ]; thenecho "帶參數編譯"
elseecho "原生編譯"
fi
在中括號內側和操作數之間添加空格后,[、“$git_app”、=、“health”、] 會被正確識別為 test 命令的參數,腳本就能正常執行。
中括號外側空格
中括號外側與其他元素(如 if、; 等)之間的空格不是強制要求,但為了代碼的可讀性,通常會添加空格。
示例:
#!/bin/bash
git_app="abc"
if["$git_app" = "abc"];thenecho "帶參數編譯"
elseecho "原生編譯"
fi
上述代碼雖然能正常執行,但可讀性較差,添加空格后代碼會更易讀:
#!/bin/bash
git_app="abc"
if [ "$git_app" = "abc" ]; thenecho "帶參數編譯"
elseecho "原生編譯"
fi
總結
中括號內側空格是必須的,缺少會導致命令執行出錯;中括號外側空格不影響命令執行,但添加空格能提升代碼的可讀性。