起底 Linux 系統(tǒng) Shell 中那些特殊變量
在Shell腳本中,$符號有多種含義,它通常用于表示變量、特殊變量或參數(shù),今天介紹幾個特殊的變量。
- $0表示shell腳本文件本身
- $1 ~ $n腳本的位置參數(shù),表示腳本或函數(shù)的參數(shù)。例如,$1表示第一個參數(shù),$2表示第二個參數(shù),依此類推
- $#傳遞給腳本或函數(shù)的參數(shù)個數(shù)
- $@傳遞給腳本或函數(shù)的所有參數(shù)的列表,每個參數(shù)是一個獨立的單詞
- $?表示上一個命令的退出狀態(tài),如果為0表示成功,非零值表示失敗
- $$表示當(dāng)前腳本或進(jìn)程的進(jìn)程ID
- $!表示后臺運行的最后一個進(jìn)程的進(jìn)程ID
- $*表示所有傳遞給腳本的參數(shù)列表(位置參數(shù)),并將它們作為一個單詞顯示
- $-用于顯示當(dāng)前Shell的選項設(shè)置
當(dāng)運行 echo $- 時,它會輸出一個包含不同字母的字符串:
# echo $-
himBH
每個字母的含義如下:
- h: 啟用hash命令功能,用于記住命令的路徑,以加快命令的查找速度。
- i: 啟用Shell的交互模式。
- m: 啟用作業(yè)控制的多用戶模式。
- B: 啟用通知作業(yè)完成狀態(tài)的功能。
- H: 啟用Shell歷史功能。
因此,himBH 表示這個Shell當(dāng)前啟用了 hash、交互模式、多用戶模式、作業(yè)狀態(tài)通知和歷史功能。這些選項可以根據(jù)腳本或Shell的需要進(jìn)行配置
注意:$* 和 $@ 在大多數(shù)情況下表現(xiàn)相似,但在處理引號時有一些關(guān)鍵的區(qū)別。
[root@localhost]# cat b.sh && bash b.sh
# 使用 "$*" 和 "$@"
set -- "arg1" "arg2 with space" "arg3"
echo 'Using "$*"'
for arg in "$*"; do
echo $arg
done
echo 'Using "$@"'
for arg in "$@"; do
echo $arg
done
Using "$*"
arg1 arg2 with space arg3
Using "$@"
arg1
arg2 with space
arg3
在"$*"中,所有參數(shù)被當(dāng)作單個字符串,參數(shù)之間用第一個字符(默認(rèn)是空格)分隔。而在"$@"中,每個參數(shù)都被當(dāng)作獨立的字符串。
在實際使用中,如果希望參數(shù)原封不動的傳遞出去,可能更適合使用"$@",它以類似數(shù)組的方式表示傳遞給腳本的所有參數(shù)。