Shell特殊變量:Shell $0, $#, $*, $@, $?, $$和命令行參數shell
前面已經講到,變量名只能包含數字、字母和下劃線,由於某些包含其餘字符的變量有特殊含義,這樣的變量被稱爲特殊變量。bash
特殊變量列表函數
變量 | 含義 |
$0 | 當前腳本的文件名 |
$n | 傳遞給腳本或函數的參數,n是一個數字表示第幾個參數,好比$1,是第一個參數;$2是第二個參數 |
$# | 傳遞給腳本或函數的參數個數 |
$* | 傳遞給腳本或函數的全部參數 |
$@ | 傳遞給腳本或函數的全部參數。被雙引號("")包含時與$*有所不一樣,下變會講到 |
$? | 上個命令的退出狀態,或函數的返回值 |
$$ | 當前shell的進程id 。對於shell腳本,就是這些腳本所在的進程id |
運行腳本時傳遞給腳本的參數稱爲命令行參數。命令行參數用 $n 表示,例如,$1 表示第一個參數,$2 表示第二個參數,依次類推。spa
請看下面的腳本:命令行
#!/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 : $#"
運行結果:code
[root@lvs-1 jiaoben]# ./1.sh guojiagu zhangsan File Name: ./1.sh First Parameter : guojiagu First Parameter : zhangsan Quoted Values: guojiagu zhangsan Quoted Values: guojiagu zhangsan Total Number of Parameters : 2
$* 和 $@ 都表示傳遞給函數或腳本的全部參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出全部參數。blog
可是當它們被雙引號(" ")包含時,"$*" 會將全部的參數做爲一個總體,以"$1 $2 … $n"的形式輸出全部參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出全部參數。進程
下面例子能夠看出$* 和 $@ 區別:table
#!/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
執行結果:class
[root@lvs-1 jiaoben]# ./2.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。
不過,也有一些命令返回其餘值,表示不一樣類型的錯誤。
例子:
[root@lvs-1 jiaoben]# cat 1.sh #!/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 : $#" echo $?
執行結果:
[root@lvs-1 jiaoben]# ./1.sh guojiagu zhangsan File Name: ./1.sh First Parameter : guojiagu First Parameter : zhangsan Quoted Values: guojiagu zhangsan Quoted Values: guojiagu zhangsan Total Number of Parameters : 2 0
$? 也能夠表示函數的返回值,後續將會講解。