$# 是傳給腳本的參數個數
$
0
是腳本自己的名字
$
1
是傳遞給該shell腳本的第一個參數
$
2
是傳遞給該shell腳本的第二個參數
$@ 是傳給腳本的全部參數的列表
$* 是以一個單字符串顯示全部向腳本傳遞的參數,與位置變量不一樣,參數可超過
9
個
$$ 是腳本運行的當前進程ID號
$? 是顯示最後命令的退出狀態,
0
表示沒有錯誤,其餘表示有錯誤
|
區別:$@ $*css
相同點:都是引用全部參數shell
不一樣點:只有在雙引號中體現出來。假設在腳本運行時寫了三個參數(分別存儲在$1 $2 $3)則"$*" 等價於 「$1 $2 $3"(傳遞了一個參數);而「$@" 等價於 "$1" "$2" "$3"(傳遞了三個參數)ide
例子一spa
##dels.sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"
echo "show parm list:$*"
echo "show process id:$$"
echo "show precomm stat: $?"
執行結果code
1
2
3
4
5
6
7
8
9
|
[@jihite]$ sh del.sh
1
2
3
number:
3
scname:del.sh
first:
1
second:
2
argume:
1
2
3
show
parm list:
1
2
3
show
process id:
21057
show
precomm stat:
0
|
例子2:orm
#!/bin/shblog
num=$#進程
name=$0ci
echo "number:$num"字符串
echo "scname:$name"
echo $0
echo $1
echo $2
for ((i=0; i<$num; i++))
do
echo "$i"
done
echo "argume:$@"
for key in $@
do
echo $key
done
echo "-----------------"
for key in "$@"
do
echo $key
done
echo "-----------------------------"
for key2 in $*
do
echo $key2
done
echo "-----------------"
for key2 in "$*"
do
echo $key2
done
echo "show process id:$$"
cho
echo "show precomm stat: $?"
執行結果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[@jihite]$ sh del.sh a b
number:
2
scname:del.sh
del.sh
a
b
0
1
argume:a b
a
b
-----------------
a
b
-----------------------------
a
b
-----------------
a b
show
process id:
23582
del.sh: line
37:
cho: command not found
show
precomm stat:
127
|