shell中變數$#,$@,$0,$1,$2的含義

kuqlan發表於2011-08-08
下邊是一個簡單的測試指令碼,指令碼內容如下:[@more@]

1
2
3
4
5
6
7
8
9
10
11
12
13
14


# cat test.sh
#!/bin/sh
echo "num:$#"
echo "shname:$0"
echo "first :$1"
echo "second:$2"
echo "arg:$@"
echo "all:$*"
echo "pid:$$"
echo "status:$?"
echo "lastname:$_"
echo "last_pid:$!"
echo "flag:$-"

儲存退出

執行指令碼

1
2
3
4
5
6
7
8
9
10
11
12
13


# sh test.sh one two three four
num:4
shname:test.sh
first :one
second:two
arg:one two three four
all:one two three four
pid:1222
status:0
lastname:/usr/bin/gnome-session
last_pid:
flag:

透過顯示結果可以看到:

$# 是傳給指令碼的引數個數

$0 是指令碼本身的名字

$1是傳遞給該shell指令碼的第一個引數

$2是傳遞給該shell指令碼的第二個引數,以此類推,$3是第三個引數…

$@ 是傳給指令碼的所有引數的列表,但是每個引數都是一個獨立的”"引用字串,這就意味著引數被完整地傳遞,並沒有被解釋和擴充套件.這也意味著,每個引數列表中的每個引數都被當成一個獨立的單詞

$*與$@同義,但是所有的位置引數,被作為一個單詞.

$$是指令碼自身的程式ID.這個變數經常用來構造一個”unique”的臨時檔名.

$?是命令,函式或者指令碼本身的退出狀態,用於檢查上一個命令,函式或者指令碼執行是否正確。(在Linux中,命令退出狀態為0表示該命令正確執行,任何非0值表示命令出錯。)

$_是儲存之前執行的命令的最後一個引數.這裡是/usr/bin/gnome-session

$!是在後臺執行的最後的工作的PID(程式ID),本例子中沒有,所以為空

$-傳遞給指令碼的falg(使用set 命令).這起初是ksh 的特徵,後來被引進到Bash ,但不幸的是,Bash 中它看上去也不能可靠的工作.使用它的一個可能的方法就是讓這個指令碼進行自我測試(檢視是否是互動的).—-這個來自網上,怎麼使用有待確認

源文件 <>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18841027/viewspace-1053586/,如需轉載,請註明出處,否則將追究法律責任。

相關文章