在 shell 腳本檔案中我看到“$*”,它是什麼意思以及我們什麼時候必須使用它?
答案1
從bash(1)
……
特殊參數
shell 對幾個參數進行了特殊處理。這些參數僅供參考;不允許向他們分配。
*
擴展到位置參數,從 1 開始。當擴展發生在雙引號內時,它將擴展為單個單詞,每個參數的值由IFS
特殊變數的第一個字元分隔。即,"$*"
相當於"$1c$2c…"
,其中 c 是變數值的第一個字元IFS
。如果IFS
未設置,參數之間以空格分隔。如果IFS
為 null,則連接參數時不插入分隔符號。
@
擴展到位置參數,從 1 開始。當擴展發生在雙引號內時,每個參數都會擴展為單獨的單字。即,"$@"
相當於"$1" "$2" …
。如果雙引號擴展發生在單字內,則第一個參數的擴展與原始單字的開頭部分連接,最後一個參數的擴展與原始單字的最後部分連接。當沒有位置參數時,"$@"
擴展$@
為空(即,它們被刪除)。
基本上,$*
是一個特殊變量,其值是腳本(或 shell 函數)的參數。大多數時候,"$@"
比較合適。
答案2
這對應於傳遞給腳本的所有參數。在您的示例中,它用引號引起來;這很重要,因為引號封裝了參數之間的(大概)空格。在 shell 腳本中省略引號通常會導致錯誤。
這裡,對於 bash,摘自線上說明頁:
* Expands to the positional parameters, starting from one. When the expansion occurs
within double quotes, it expands to a single word with the value of each parameter
separated by the first character of the IFS special variable. That is, "$*" is
equivalent to "$1c$2c...", where c is the first character of the value of the IFS
variable. If IFS is unset, the parameters are separated by spaces. If IFS is null,
the parameters are joined without intervening separators.
乾杯
SC。