哪些是(Bash)shell 特殊參數/變數?
我發現了一些以
$
符號開頭的 Bash 特殊參數。範例:當我在尋找退出狀態時,我知道$?
,程序 ID等$$
。所以,我分享 這篇文章是為了了解哪些是特殊的 bash (shell) 參數及其用法。
參考Bash 參考手冊中的3.4.2 特殊參數。
特殊參數:
*
(
$*
) 展開為位置參數,從一開始。當擴展不在雙引號內時,每個位置參數都會擴展為一個單獨的單詞。在執行它的上下文中,這些詞會受到進一步的分詞和路徑名擴展。當擴展出現在雙引號內時,它會擴展為一個單詞,每個參數的值由IFS
特殊變數的第一個字元分隔。也就是說,"$*"
等價於"$1c$2c…"
,其中cIFS
是變數值的第一個字元。如果IFS
未設置,則參數以空格分隔。如果IFS
為 null,則連接參數而不插入分隔符。
@
(
$@
) 展開為位置參數,從一開始。當擴展出現在雙引號內時,每個參數都擴展為一個單獨的單詞。即,"$@"
等價於"$1" "$2" …
。如果雙引號擴展出現在一個單詞中,則第一個參數的擴展與原始單詞的開頭部分連接,最後一個參數的擴展與原始單詞的最後部分連接。當沒有位置參數時,"$@"
擴展$@
為空(即,它們被刪除)。
#
(
$#
) 擴展為十進制位置參數的數量。
?
(
$?
) 擴展到最近執行的前台管道的退出狀態。
-
(
$-
, 一個連字元。) 擴展為呼叫時指定的目前選項標誌,由set
內置命令,或由 shell 本身設置的那些(例如-i
選項)。
$
(
$$
) 展開為 shell 的程序 ID。在()
子shell 中,它擴展為呼叫shell 的程序ID,而不是子shell。
!
(
$!
) 擴展為最近放入後台的作業的程序 ID,無論是作為非同步命令執行還是使用bg
內置命令(請參閱Job Control Builtins)。
0
(
$0
) 擴展為 shell 或 shell 腳本的名稱。這是在 shell 初始化時設置的。如果使用命令文件(請參閱Shell 腳本)呼叫 Bash,$0
則將其設置為該文件的名稱。如果 Bash 以-c
選項啟動(請參閱Invoking Bash),則$0
設置為要執行的字元串之後的第一個參數(如果存在)。否則,它被設置為用於呼叫 Bash 的文件名,由參數 0 給出。這也可以從 bash 的手冊頁列印:
$ man bash | awk '/Special Parameters$/','/Shell Variables$/'
以上與POSIX定義的特殊參數相同。
此外,還有位置參數
$1
,$2
, … 包含 shell 或目前函式的命令行參數(3.4.1 位置參數)。它們也是 POSIX 功能。舊版本的 Bash 也被列為
$_
特殊參數,但現在它被列在 shell 設置的其他變數中(5.2 Bash 變數)。$_
不是 POSIX,其他 shell 可能不支持它。
_
(
$_
,下劃線。) 在 shell 啟動時,設置為用於呼叫環境或參數列表中傳遞的 shell 或正在執行的 shell 腳本的絕對路徑名。隨後,在展開後展開到前一個命令的最後一個參數。還設置為用於呼叫執行的每個命令並放置在導出到該命令的環境中的完整路徑名。檢查郵件時,此參數保存郵件文件的名稱。