最近在學(xué)習(xí)shell編程,對(duì)于shell腳本中第一行用于指定腳本解釋器的代碼到底有沒有起到指定解釋器的作用感到疑惑,如:#!/bin/bash
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!成都創(chuàng)新互聯(lián)公司為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站負(fù)責(zé)任的成都網(wǎng)站制作公司!
在網(wǎng)上查找了不少資料,發(fā)現(xiàn)網(wǎng)上竟然也分了兩大派,一些人認(rèn)為#!/bin/bash沒有起到作用,因?yàn)樵趕hell腳本中#表示是注釋的意思,而另一些人則認(rèn)為是起作用的,但是沒有給出令人信服的理由,沒辦法,我只好自己動(dòng)手做測(cè)試了。
1.首先我先創(chuàng)建了一個(gè)名為test.sh的shell文件,里面內(nèi)容如下
這個(gè)腳本文件中的第二行代碼使用了bash語法,不支持POSIX規(guī)范,所以如果這個(gè)文件是以bash解釋器運(yùn)行的話,是可以正常運(yùn)行,而如果換為sh解釋器的話,便會(huì)報(bào)語法錯(cuò)誤
修改test.sh權(quán)限
然后直接執(zhí)行test.sh
可以看到,腳本成功運(yùn)行,沒有報(bào)錯(cuò),然后我將第一行修改為#!/bin/sh
2.然后運(yùn)行
這個(gè)時(shí)候便報(bào)了一個(gè)語法錯(cuò)誤
由此可以得出結(jié)論,shell腳本的第一行指定腳本解釋器是確實(shí)起作用的,不過值得注意的是,當(dāng)我們使用指定解釋器運(yùn)行腳本的時(shí)候,我們腳本文件中的第一行會(huì)失效,比如通過bash+文件名運(yùn)行腳本的方式,這樣即便我在文件中指定是sh解釋器,結(jié)果依然會(huì)以bash解釋器運(yùn)行的。
(本文由源碼時(shí)代技術(shù)老師原創(chuàng)撰寫,轉(zhuǎn)載請(qǐng)注明出處)