標籤:
$表示當前的進程,當使用echo $$是會輸出當前shell的pid
1 echo $$
特殊變數列表
變數 |
含義 |
$0 |
當前指令碼的檔案名稱 |
$n |
傳遞給指令碼或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。 |
$# |
傳遞給指令碼或函數的參數個數。 |
$* |
傳遞給指令碼或函數的所有參數。 |
[email protected] |
傳遞給指令碼或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。 |
$? |
上個命令的退出狀態,或函數的傳回值。 |
$$ |
當前Shell進程ID。對於 Shell 指令碼,就是這些指令碼所在的進程ID。 |
指令檔varlist.sh
1 #!/bin/bash2 3 echo "File name: $0"4 echo "First parameter: $1"5 echo "Second Parameter: $2"6 echo "Quoted Values: [email protected]"7 echo "Quoted Values: $*"8 echo "Total Number of Parameter : $#"
執行varlist.sh hello world結果輸出如下:
$ sh ./varlist.sh hello worldFile name: ./varlist.shFirst parameter: helloSecond Parameter: worldQuoted Values: hello worldQuoted Values: hello worldTotal Number of Parameter : 2
$*與[email protected]的區別:
當使用""是會出對於他們存在差異,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"[email protected]" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。 看下面的例子:
1 #!/bin/bash 2 #description: use variable 3 #Author: blacksonny 4 #Copyright (c) 5 #Script follows here: 6 7 echo "\$*=" $* 8 echo "\"\$*\"=" "$*" 9 10 echo "\[email protected]=" [email protected]11 echo "\"\[email protected]\"=" "[email protected]"12 13 echo "print each param from \$*"14 for var in $*15 do16 echo "$var"17 done18 19 echo "print each param from \[email protected]"20 for var in [email protected]21 do22 echo "$var"23 done24 25 echo "print each param from \"\$*\""26 for var in "$*"27 do28 echo "$var"29 done30 31 echo "print each param from \"\[email protected]\""32 for var in "[email protected]"33 do34 echo "$var"35 done
輸出結果:
1 $ sh ./varcompare.sh "a" "b" "c" "d" 2 $*= a b c d 3 "$*"= a b c d 4 [email protected]= a b c d 5 "[email protected]"= a b c d 6 print each param from $* 7 a 8 b 9 c10 d11 print each param from [email protected]12 a13 b14 c15 d16 print each param from "$*"17 a b c d18 print each param from "[email protected]"19 a20 b21 c22 d
退出狀態:
$? 可以擷取上一個命令的退出狀態。所謂退出狀態,就是上一個命令執行後的返回結果。
退出狀態是一個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1。
Shell中特殊的變數