shell特殊變數:shell $0, $#, $*, $@, $?, $$和命令列引數
前面已經講到,變數名只能包含數字、字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。
1、例如,$ 表示當前shell程序的id,即pid,看下面的**:
$echo $$
執行結果
29949
2、特殊變數列表
變數含義
$0當前指令碼的檔名
$n傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個引數。例如,第乙個引數是$1,第二個引數是$2。
$#傳遞給指令碼或函式的引數個數。
$*傳遞給指令碼或函式的所有引數。
$@傳遞給指令碼或函式的所有引數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。
$?上個命令的退出狀態,或函式的返回值。
$$當前shell程序id。對於 shell 指令碼,就是這些指令碼所在的程序id。
$!後台執行的最後乙個程序的id號
$-顯示shell使用的當前選項,與set命令功能相同。
3、命令列引數
執行指令碼時傳遞給指令碼的引數稱為命令列引數。命令列引數用 $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
4、$* 和 $@ 的區別
$* 和 $@ 都表示傳遞給函式或指令碼的所有引數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有引數。
但是當它們被雙引號(" ")包含時,"$*" 會將所有的引數作為乙個整體,以"$1 $2 … $n"的形式輸出所有引數;"$@" 會將各個引數分開,以"$1" "$2" … "$n" 的形式
輸出所有引數。
下面的例子可以清楚的看到 $* 和 $@ 的區別: 例:
#!/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
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
$ ./test.sh a b
$*= a b
"$*"= a b
$@= a b
"$@"= a b
print each param from $*ab
print each param from $@ab
print each param from "$*"
a bprint each param from "$@"ab
5、退出狀態
$? 可以獲取上乙個命令的退出狀態。所謂退出狀態,就是上乙個命令執行後的返回結果。退出狀態是乙個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1。不過,也有一些命令返回其他值,表示不同型別的錯誤。
下面例子中,命令成功執行:例:
#!/bin/sh
echo "file name: $0"
echo "first parameter : $1"
echo "first parameter : $2"
echo "quoted values: $@"
echo "quoted values: $*"
echo "total number of parameters : $#"
echo $?
$./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
0
shell 特殊變數
變數解釋 展開為 1c 2c 3c 4c 5c.其中字母c為變數 ifs 的第乙個字母,ifs預設為空.展開為 1 2 3 4 5 引數個數 上乙個命令的返回值 當前指令碼的程序id pid 上乙個後台執行程序的程序號.上乙個命令的最後乙個引數.下面的aaa bbb 為變數名 如果 aaa為空或未定...
Shell特殊變數
變數名只能包含數字 字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。例如,表示當前shell程序的id,即pid,看下面的 echo 執行結果29949 特殊變數列表 變數含義 0 當前指令碼的檔名 n傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個引數。例如,第乙...
shell 特殊變數
前面已經講到,變數名只能包含數字 字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。例如,表示當前shell程序的id,即pid,看下面的 echo 執行結果29949 特殊變數列表 變數 含義 0 當前指令碼的檔名 n傳遞給指令碼或函式的引數。n 是乙個數字,表示第幾個...