shell腳本中的$# $0 [email protected] $* $$ $! $?的意義
阿新 • • 發佈:2017-08-24
腳本 $* width 上一個 pre shell int .cn height
轉載自:http://www.cnblogs.com/davygeek/p/5670212.html
今天學寫腳本遇到一些變量不認識,在此做下記錄。
變量 | 含義 |
$0 | 當前腳本的文件名 |
$n | 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2 |
$# | 傳遞給腳本或函數的參數個數 |
$* | 傳遞給腳本或函數的所有參數 |
[email protected] | 傳遞給腳本或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同 |
$? | 上個命令的退出狀態,或函數的返回值 |
$$ | 當前Shell進程ID。對於 Shell 腳本,就是這些腳本所在的進程ID |
$* 和 [email protected] 的區別
$* 和 [email protected] 都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"[email protected]" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。
例:
創建ex4-extend.sh
#!/bin/sh echo "\$*=" $* echo "\"\$*\"=" "$*" echo "\[email protected]=" [email protected] echo "\"\[email protected]\"=" "[email protected]" echo "print each param from \$*" for var in $* do echo "$var" done echo "print each param from \[email protected]" for var in [email protected] do echo "$var" done echo "print each param from \"\$*\"" for var in "$*" do echo "$var" done echo "print each param from \"\[email protected]\"" for var in "[email protected]" do echo "$var" done
執行./ex4-extend.sh "a" "b" "c" "d",結果如下
$*= a b c d "$*"= a b c d [email protected]= a b c d "[email protected]"= a b c d print each param from $* a b c d print each param from [email protected] a b c d print each param from "$*" a b c d print each param from "[email protected]" a b c d
退出狀態
$? 可以獲取上一個命令的退出狀態。所謂退出狀態,就是上一個命令執行後的返回結果。
退出狀態是一個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1。
不過,也有一些命令返回其他值,表示不同類型的錯誤。
shell腳本中的$# $0 [email protected] $* $$ $! $?的意義