shell腳本第一行:#!/bin/bash的含義

相信有接觸過shell腳本的同學們都應該知道,shell腳本的第一行一般會寫有以下字樣:

#!/bin/bash
或者

#!/bin/sh
或者

#!/bin/awk


比較常見的說法是:第一行的內容指定了shell腳本解釋器的路徑,而且這個指定路徑只能放在文件的第一行

但我們也知道,在shell腳本里符號#是作爲註釋符出現的,在其之後的同一行內容會被視爲註釋進而不執行

那麼第一行所謂的指定路徑的語句真的會生效嗎?或者換個說法,存不存在只是行業規範爲了提高代碼可讀性所做的註釋的可能性呢?

我嘗試在網上搜索,除了認同第一行作用的說法以外,也確實有人質疑第一行只是普通註釋:http://blog.csdn.net/u011175448/article/details/11269949

因爲在寫腳本的時候也會有不寫所謂第一行也能執行的情況

作出這樣的揣測也不是毫無道理,畢竟親測在ubuntu的gedit編輯器支持高亮的情況下,我們看到的代碼是這樣的,第一行跟註釋行顏色是一樣的:


????等等!!!!

你再看仔細一點?!第一行跟第二行真的是一樣的嗎??

沒錯,我們可以看到第一行的字體被加粗微笑

是因爲我第一行寫了路徑所以加粗了?再接着看:

不管寫什麼,第一行的#!內容都會加粗。那麼接着去除#後面的!:


將第一行的#!改爲#後變爲了正常的註釋,而且重點是第二行的#!部分從字體上看也成了註釋,沒有指定路徑的功能

gedit居然幫我們解釋了一切微笑

當然如果你還是不放心,可以試着執行一下(當然記得執行前先用chmod給文件加上執行權限):


亂寫第一行的結果就是得到一個完美的報錯。

至於爲什麼不寫第一行也能執行,上面這個報錯開頭也已經給了我們答案:第一行寫錯或者不寫時,系統會有一個默認的解釋器進行解釋,此處爲bash。

結論:第一行的內容指定了shell腳本解釋器的路徑,而且這個指定路徑只能放在文件的第一行。第一行寫錯或者不寫時,系統會有一個默認的解釋器進行解釋。

以上。


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