特殊變量:某些包含其他字符的變量有特殊含義,這樣的變量被稱為特殊變量。
特殊變量列表:
1. ${0} 當前腳本的文件名
2. ${n} 傳遞給腳本或函數的參數 n是一個數字,${1}表示第一個參數
3. ${#} 傳遞給腳本或函數的參數個數
4. ${*} 傳遞給腳本或函數的所有參數 與${*}的區別請往下看
5. ${@} 傳遞給腳本或函數的所有參數
6. ${?} 上個命令的退出狀態,或函數的返回值
7. ${$} 當前shell 的進程ID 對於shell腳本,就是這些腳本所在的進程ID
例如如下腳本
#!/bin/bash echo "File Name: ${0}" echo "First Parameter : ${1}" echo "First Parameter : ${2}" echo "Quoted Values: ${@}" echo "Quoted Values: ${*}" echo "Total Number of Parameters : ${#}"
結果如下
$./hello Zara Ali File Name : ./hello First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2
${*} 和${@}的區別
${*} 和${@}都表示傳遞給腳本或函數的所有參數。
不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。
被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。
下面的例子可以清楚的看到 $* 和 $@ 的區別:
#!/bin/bash echo "\$*=" $* echo "\"\$*\"=" "$*" echo "\$@=" $@ echo "\"\$@\"=" "$@" echo "print each param from \$*" for var in $* do echo "$var" done echo "print each param from \$@" for var in $@ do echo "$var" done echo "print each param from \"\$*\"" for var in "$*" do echo "$var" done echo "print each param from \"\$@\"" for var in "$@" do echo "$var" done
執行 hello "a" "b" "c" "d",結果如下:
$*= a b c d "$*"= a b c d $@= a b c d "$@"= a b c d print each param from $* a b c d print each param from $@ a b c d print each param from "$*" a b c d print each param from "$@" a b c d
退出狀態 --${?} :獲取上一個命令的退出狀態。 0-成功 1-失敗
#!/bin/bash echo "測試獲取退出狀態" echo ${?}
執行 hello ,結果如下:
“測試” 0
${?}也可以表示函數的返回值,敬請期待!!!