bash中的空格

先來看一下 空格在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"看做一個整體,它始終返回爲真。


至於管道,雖然|兩邊空格可有可無,但爲了美觀,一般還是保留兩邊的空格的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章