2012-07-20 75 views
0

使用點運行shell腳本爲什麼「回聲$ 0」打印-bash

假設我有以下代碼

片段
#!/usr/bin/env bash 
echo $0 

我執行使用點

. ./script.sh 

輸出(。):

-bash 

然而,

,如果我沒有點運行

輸出的路徑名稱爲腳本的名稱合併如我所料。

回答

2

源腳本在現有的解釋器中運行而不是exec新的,這意味着$0未正常初始化。

+0

'$ 1'等等都可以。 – 2012-07-20 04:46:34

+0

右...固定。 – 2012-07-20 04:50:49

+0

可以將其視爲從您正在採購的文件中複製/粘貼代碼。在這種情況下,'#!/ shebang'只是一個註釋,沒有什麼會修改'$ 0'。 – tripleee 2012-07-20 07:04:42

0

當您使用.運行腳本時,它基本上就像直接在shell命令行中輸入腳本內容一樣。因此echo "$0"將輸出如果您只是鍵入它將輸出的內容。

$0這樣的特殊變量只有在啓動一個新的shell時才被初始化,其中.不會這樣做,否則它不會非常有用。

但是,如果你正在使用bash版本3或更高,你總是可以找到當前正在執行的如此哪些文件:

echo "$BASH_SOURCE" 

這無論文件是如何被調用的工作。

0


.source別名:

不要使用此命令運行一個腳本,它已經導入源文件創建。
你可以在這裏看到:Advanced Bash scripting guide

+0

ABS只是一個平庸的資源。如果要影響當前環境,則應該使用'.'或'source'來運行腳本。 – 2012-07-20 04:48:39