2013-03-24 88 views
5

在我script.sh

[email protected] 
bb=$* 
echo $aa 
echo $bb 

運行它時:

source script.sh a b c d e f g 

我得到:

a b c d e f g 
a b c d e f g 

是什麼[email protected]$*之間的區別?

+0

@mat爲什麼谷歌沒有找到所有其他的重複? – 0x90 2013-03-24 09:38:40

+1

@ 0x90:Google不索引「標點符號」,只是單詞;嘗試[symbolhound](http://symbolhound.com/?q=%24%40+%24%2A)這樣的事情。 – 2013-03-24 12:27:29

回答

8

$*[email protected]之間沒有區別,但是"[email protected]""$*"之間存在差異。

$ cat 1.sh 
mkdir "$*" 

$ cat 2.sh 
mkdir "[email protected]" 

$ sh 1.sh a "b c" d 

$ ls -l 
total 12 
-rw-r--r-- 1 igor igor 11 mar 24 10:20 1.sh 
-rw-r--r-- 1 igor igor 11 mar 24 10:20 2.sh 
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 a b c d 

我們給了三個參數的腳本(ab cd),但在「$ *」他們都被合併爲一個參數a b c d

$ sh 2.sh a "b c" d 

$ ls -l 
total 24 
-rw-r--r-- 1 igor igor 11 mar 24 10:20 1.sh 
-rw-r--r-- 1 igor igor 11 mar 24 10:20 2.sh 
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 a 
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 a b c d 
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 b c 
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 d 

您可以在這裏看到,這"$*"意味着總有一個單獨的參數,並"[email protected]"包含許多參數,如腳本了。 「$ @」是一個特殊的標記,意思是「用引號包裹每個單獨的參數」。因此a "b c" d變成(或者說停留)"a" "b c" "d"而不是"a b c d""$*")或"a" "b" "c" "d"[email protected]$*)。

另外,我建議的主題是這個美麗閱讀:

http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST

相關問題