轉載自:http://www.cnblogs.com/davygeek/p/5670212.html
今天學寫腳本遇到一些變量不認識,在此做下記錄。
| 變量 | 含義 |
| $0 | 當前腳本的文件名 |
| $n | 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2 |
| $# | 傳遞給腳本或函數的參數個數 |
| $* | 傳遞給腳本或函數的所有參數 |
| $@ | 傳遞給腳本或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同 |
| $? | 上個命令的退出狀態,或函數的返回值 |
| $$ | 當前Shell進程ID。對於 Shell 腳本,就是這些腳本所在的進程ID |
$* 和 $@ 的區別
$* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。
例:
創建ex4-extend.sh
#!/bin/sh
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
執行./ex4-extend.sh "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。
不過,也有一些命令返回其他值,表示不同類型的錯誤。
