$*
在shell腳本中究竟意味着什麼?
例如,考慮下面的代碼片段
$*
在shell腳本中究竟意味着什麼?
例如,考慮下面的代碼片段
它表示傳遞給腳本或函數的所有參數,按字分割。
它通常是錯誤的,應該被替換爲"[email protected]"
,它正確地分隔了參數。
那麼,@ДМИТРИЙМАЛИКОВ(Dmitri?)已經解釋了$ *最初是如何構造成單個字符串的。這裏重要的是它隨後受到shell的正常分詞,除非*它被引用。 「$ *」將確保參數仍然被處理爲一個單一的長字符串。 「$ @」強制將參數列表作爲引用字符串的數組處理。每個都有其用處,重要的是要知道其中的差異。 –
很容易自己找到答案:專門
特殊參數
shell對幾個參數:
man bash
→/\$\*
。這些參數只能被引用;不允許分配給他們。
- 擴展到位置參數,從一開始。當擴展出現在雙引號內時,它將擴展爲單個字,每個參數的值由特殊變量的第一個字符分隔。也就是
"$*"
相當於"$1c$2c..."
,其中c
是IFS
變量的第一個字符。如果IFS
未設置,則參數由空格分隔。如果IFS
爲空,則參數連接時不插入分隔符。
$*
擴展爲傳遞給該shell腳本的所有參數。
$0
= shell腳本的名稱
$1
=第一個參數
$2
=第二個參數 ...等
$#
=傳遞給shell腳本
HTTP參數的個數:// TLDP .org/LDP/abs/html/internalvariables.html#ARGLIST – alfasin
命令行中的所有位置參數調用腳本:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF – GreenMatt
基於POSIX的文檔在這裏特別有用,因爲它們不僅適用於bash:http://pubs.opengroup.org/ onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_05_02 –