1. 程式人生 > >Shell特殊變量:Shell $0, $#, $*, $@, $?, $$和命令行參數

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

body int 腳本 一個數 color $* 部分 所在 bash

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

特殊變量列表

變量    含義
$0        當前腳本的文件名
$n        傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。
$#        傳遞給腳本或函數的參數個數。
$*        傳遞給腳本或函數的所有參數。
$@        傳遞給腳本或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。
$?        上個命令的退出狀態,或函數的返回值。一般情況下,大部分命令執行成功會返回 0,失敗返回 1
。 $$ 當前Shell進程ID。對於 Shell 腳本,就是這些腳本所在的進程ID。 $* 和 $@ 的區別 $* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$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 "$*" a b c d print each param from "$@" a b c d 說明:雙引號包含時,"$*"的參數被當做一個整體,而"$@"還是遍歷每一個參數

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