Shell特殊变量:Shell $0,$#,$*,$@,$?,$$和命令行参数
特殊變量列表
?
| 變量 | 含義 |
| $0 | 當前腳本的文件名 |
| $n | 傳遞給腳本或函數的參數。n是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2. |
| $# | 傳遞給腳本或函數的參數個數 |
| $* | 傳遞給腳本或函數的所有參數。 |
| $@ | 傳遞給腳本或函數的所有參數。被雙引號("")包含時,與$*稍有不同,下面將會講到。 |
| $? | 上個命令的退出狀態,或函數的返回值。 |
| $$ | 當前Shell進程ID。對于Shell腳本,就是這些腳本所在的進程ID。 |
命令行參數
? 運行腳本時傳遞給腳本的參數稱為命令行參數。命令行參數用$n表示,例如,$1表示第一個參數,$2表示第二個參數,依次類推。
請看下面的腳本:
#!/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 : $#"
運行結果:
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values : Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
?
$*和$@的區別
$*和$@都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$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
執行./test.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.
不過,也有一些命令返回其他值,表示不同類型的錯誤。
下面例子中,命令成功執行:
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
QuotedValues : Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
?
總結
以上是生活随笔為你收集整理的Shell特殊变量:Shell $0,$#,$*,$@,$?,$$和命令行参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下临时以非root身份执行命令
- 下一篇: iptables的nat表中 -j re