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