shell腳本中$*的意思是什麼?

shell腳本中$*的意思是什麼?

在 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。

相關內容