shell指令碼第一行 bin bash的含義

2021-09-28 19:26:34 字數 1259 閱讀 1454

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

#!/bin/bash
或者

#!/bin/sh
或者

#!/bin/awk
比較常見的說法是:

第一行的內容指定了shell指令碼直譯器的路徑,而且這個指定路徑只能放在檔案的第一行

但我們也知道,在shell指令碼裡符號#是作為注釋符出現的,在其之後的同一行內容會被視為注釋進而不執行

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

我嘗試在網上搜尋,除了認同第一行作用的說法以外,也確實有人質疑第一行只是普通注釋:

因為在寫指令碼的時候也會有不寫所謂第一行也能執行的情況

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

????等等!!!!

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

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

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

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

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

gedit居然幫我們解釋了一切

當然如果你還是不放心,可以試著執行一下(當然記得執行前先用chmod給檔案加上執行許可權):

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

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

結論:第一行的內容指定了shell指令碼直譯器的路徑,而且這個指定路徑只能放在檔案的第一行。第一行寫錯或者不寫時,系統會有乙個預設的直譯器進行解釋。

以上。

shell指令碼第一行 bin bash的含義

相信有接觸過shell指令碼的同學們都應該知道,shell指令碼的第一行一般會寫有以下字樣 bin bash或者 bin sh或者 bin awk比較常見的說法是 第一行的內容指定了shell指令碼直譯器的路徑,而且這個指定路徑只能放在檔案的第一行 但我們也知道,在shell指令碼裡符號 是作為注釋...

shell指令碼第一行使用環境變數

shell 既是一種指令碼程式語言,也是乙個連線核心和使用者的軟體。常見的 shell 有 sh bash csh tcsh ash 等。在linux的一些指令碼裡,需在開頭一行指定指令碼的解釋程式,如 usr bin env python 再如 usr bin env perl usr bin e...

shell中第一行 bin bash的作用

shell中 bin bash bin ksh 這些東西是幹什麼的,有用嗎?是乙個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種 shell。這些不是注釋符,而是說明下面的指令碼是在什麼shell下面執行的,並且以該shell環境來執行指令碼,乙個簡單的例子 bin ksh ex...