Shell特殊變量:Shell $0, $#, $*, $@, $?, $$和命令行參數

Shell特殊變量:Shell $0, $#, $*, $@, $?, $$和命令行參數

前面已經講到,變量名只能包含數字、字母和下劃線,因爲某些包含其他字符的變量有特殊含義,這樣的變量被稱爲特殊變量。

例如,$ 表示當前Shell進程的ID,即pid,看下面的代碼:

$echo $$

特殊變量列表

變量

含義

$0

當前腳本的文件名

$n

$n  傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1二個參數是$2

$#

傳遞給腳本或函數的參數個數

$* 

傳遞給腳本或函數的所有參數

$@

傳遞給腳本或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。

$? 

上個命令的退出狀態,或函數的返回值

$$

當前Shell進程ID。對於   Shell 腳本,就是這些腳本所在的進程ID。

 

舉例說明:

1.     #!/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     #$0

First Parameter : Zara    #$1

Second Parameter : Ali   #$2

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

執行 ./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 "$*"    #"$*" 會將所有的參數作爲一個整體,以"$1 $2 … $n"的形式輸出所有參數

a b c d

print each param from "$@"    #"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數

a

b

c

d

退出狀態

$? 可以獲取上一個命令的退出狀態。所謂退出狀態,就是上一個命令執行後的返回結果。

退出狀態是一個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1

不過,也有一些命令返回其他值,表示不同類型的錯誤。

下面例子中,命令成功執行:

$./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

$echo $?

0

$

 

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章