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