2012-09-13 51 views
7

$*在shell腳本中究竟意味着什麼?

例如,考慮下面的代碼片段

​​
+1

HTTP參數的個數:// TLDP .org/LDP/abs/html/internalvariables.html#ARGLIST – alfasin

+0

命令行中的所有位置參數調用腳本:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF – GreenMatt

+0

基於POSIX的文檔在這裏特別有用,因爲它們不僅適用於bash:http://pubs.opengroup.org/ onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_05_02 –

回答

7

它表示傳遞給腳本或函數的所有參數,按字分割。

它通常是錯誤的,應該被替換爲"[email protected]",它正確地分隔了參數。

+3

那麼,@ДМИТРИЙМАЛИКОВ(Dmitri?)已經解釋了$ *最初是如何構造成單個字符串的。這裏重要的是它隨後受到shell的正常分詞,除非*它被引用。 「$ *」將確保參數仍然被處理爲一個單一的長字符串。 「$ @」強制將參數列表作爲引用字符串的數組處理。每個都有其用處,重要的是要知道其中的差異。 –

6

很容易自己找到答案:專門

特殊參數

shell對幾個參數:man bash/\$\* 。這些參數只能被引用;不允許分配給他們。

  • 擴展到位置參數,從一開始。當擴展出現在雙引號內時,它將擴展爲單個字,每個參數的值由特殊變量的第一個字符分隔。也就是"$*"相當於"$1c$2c...",其中cIFS變量的第一個字符。如果IFS未設置,則參數由空格分隔。如果IFS爲空,則參數連接時不插入分隔符。
1

$*擴展爲傳遞給該shell腳本的所有參數。

$0 = shell腳本的名稱

$1 =第一個參數

$2 =第二個參數 ...等

$# =傳遞給shell腳本