先來看一下 空格在bash中的使用規則:
1.賦值運算時=號兩邊不能使用空格。
2.命令與選項之間需要空格。
3.管道兩邊的空格可有可無。
再來看一下各種由於空格導致錯誤的原因:
1)賦值運算時=號左邊有空格
var ="abc"
產生的錯誤信息爲:
var: command not found
這是由於bash在解釋該條命令時,var會作爲一個命令去在系統的PATH中去尋找。一旦無法找到var這個命令就回提示“找不到var這個命令”,那麼後面的語句自然也無法執行。
2)賦值運算時=號右邊有空格
var= "abc"
產生的錯誤信息爲:
abc: command not found
這是因爲在bash中有這麼一條執行命令的方式:var=string command命令command將得到變量var的值,那麼“abc"則會作爲一個command被bash解釋,那麼返回的信息當然是“找不到abc這個命令”。
3)賦值運算時=號左右都有空格。
這種情況與第一種情況相同。
4)命令之間沒有使用空格。
常見的有如下幾種情況:
【if與[之間沒有空格】
if[ -n "abc" ];then echo ok;fi
錯誤原因:很多人認爲[ ]在bash中只是一個判斷布爾值的符號。其實[ ]在bash中的作用等同於test,它當然是一個命令。
那麼if 是一個獨立的命令,[ ]同樣也是一個獨立的命令。兩個命令直接當然要有空格,否則像 if[這樣的情況,bash只能理解爲是一個整體,因而報錯。
【[xxx]其中的參數的兩端沒有空格】
if ["abc" = "abc" ];then echo ok;fi
錯誤原因:同樣的 bash根本無法理解["abc"是個什麼東西。要牢記 [ ]不僅僅是一個符號,而是一個命令。
【[ "abc"="cba" ]其中的參數之間沒有空格】
if [ "abc"="abc" ];then echo ok;fi
錯誤原因:
=兩邊有空格,是表達式,判斷=兩邊的值是否相等,返回一個bool值.
=兩邊缺少空格,bash則會將"abc"="cba"看做一個整體,它始終返回爲真。
至於管道,雖然|兩邊空格可有可無,但爲了美觀,一般還是保留兩邊的空格的。