1. 程式人生 > >shell腳本中的$# $0 [email protected] $* $$ $! $?的意義

shell腳本中的$# $0 [email protected] $* $$ $! $?的意義

腳本 $* 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] $* $$ $! $?的意義