
有一個簡單的腳本:
echo "file: $0"
當像這樣調用時:
bash myscript.sh
或者
./myscript.sh
file: myscript.sh
按預期給出腳本 ( ) 的檔名,但在呼叫時:
來源 myscript.sh
或者
。 ./myscript.sh
給予 shell 名稱 ( bash
) 而不是腳本檔名。
為什麼會這樣呢?
答案1
第一次呼叫將啟動 bash 的新實例來解釋腳本,這表示 bash 將設定$0
為其路徑。
第二個呼叫會將檔案視為可執行檔並運行它,因此$0
將指向它。
後兩個呼叫會將檔案載入到 bash 的目前實例中,因此$0
將指向那裡。
注意:#2 需要檔案可執行,#1、#3 和 #4 則不需要。