使用點運行shell腳本爲什麼「回聲$ 0」打印-bash
假設我有以下代碼
片段#!/usr/bin/env bash
echo $0
我執行使用點
. ./script.sh
輸出(。):
-bash
然而,
,如果我沒有點運行
輸出的路徑名稱爲腳本的名稱合併如我所料。
使用點運行shell腳本爲什麼「回聲$ 0」打印-bash
假設我有以下代碼
片段#!/usr/bin/env bash
echo $0
我執行使用點
. ./script.sh
輸出(。):
-bash
然而,
,如果我沒有點運行
輸出的路徑名稱爲腳本的名稱合併如我所料。
源腳本在現有的解釋器中運行而不是exec
新的,這意味着$0
未正常初始化。
當您使用.
運行腳本時,它基本上就像直接在shell命令行中輸入腳本內容一樣。因此echo "$0"
將輸出如果您只是鍵入它將輸出的內容。
像$0
這樣的特殊變量只有在啓動一個新的shell時才被初始化,其中.
不會這樣做,否則它不會非常有用。
但是,如果你正在使用bash版本3或更高,你總是可以找到當前正在執行的如此哪些文件:
echo "$BASH_SOURCE"
這無論文件是如何被調用的工作。
.
是source
別名:
不要使用此命令運行一個腳本,它已經導入源文件創建。
你可以在這裏看到:Advanced Bash scripting guide
ABS只是一個平庸的資源。如果要影響當前環境,則應該使用'.'或'source'來運行腳本。 – 2012-07-20 04:48:39
'$ 1'等等都可以。 – 2012-07-20 04:46:34
右...固定。 – 2012-07-20 04:50:49
可以將其視爲從您正在採購的文件中複製/粘貼代碼。在這種情況下,'#!/ shebang'只是一個註釋,沒有什麼會修改'$ 0'。 – tripleee 2012-07-20 07:04:42