#首先按順序解釋各個參數的含義
1.$0 表示腳本的文件名,
具體的路徑信息和執行命令時的相對位置有關,例如
sakura@mi-OptiPlex-7050:~/sh$ sh args.sh
args.sh
sakura@mi-OptiPlex-7050:~$ sh sh/args.sh
sh/args.sh
2.$1,$2,... 表示具體的參數
3.$# 實際傳入的參數的個數
4.$$ 執行當前shell的進程pid
5.$? 上次執行的返回值,一般0表示成功.
#關於$@,$*,"$@","$*"的對比和及向java傳參的對比
首先$@,$*都表示shell腳本接受的參數列表,不包括$0
其次"$@"中的""表示弱引用,即會對$后的變量進行替換.
通過以下shell腳本和java代碼,可以清晰的看清楚四者的區別
echo '------------------$@-------------------'
echo $@
for arg in $@
do
echo -n "$arg,"
done
echo
java Test $@
echo '------------------$*-------------------'
echo $*
for arg in $*
do
echo -n "$arg,"
done
echo
java Test $*
echo '------------------"$@"-------------------'
echo "$@"
for arg in "$@"
do
echo -n "$arg,"
done
echo
java Test "$@"
echo '------------------"$*"-------------------'
echo "$*"
for arg in "$*"
do
echo -n "$arg,"
done
echo
java Test "$*"
import java.util.Arrays; public class Test { public static void main(String[] args) { System.out.println("java arg length: "+args.length); System.out.println("java arr: "+Arrays.toString(args)); } }
執行 sh test.sh 1 ab 3,輸出如下
------------------$@-------------------
1 ab 3
1,ab,3,
java arg length: 3
java arr: [1, ab, 3]
------------------$*-------------------
1 ab 3
1,ab,3,
java arg length: 3
java arr: [1, ab, 3]
------------------"$@"-------------------
1 ab 3
1,ab,3,
java arg length: 3
java arr: [1, ab, 3]
------------------"$*"-------------------
1 ab 3
1 ab 3,
java arg length: 1
java arr: [1 ab 3]
執行sh test.sh 輸入如下
------------------$@-------------------
java arg length: 0
java arr: []
------------------$*-------------------
java arg length: 0
java arr: []
------------------"$@"-------------------
java arg length: 0
java arr: []
------------------"$*"-------------------
,
java arg length: 1
java arr: []
結論
$*,$@一樣,都是傳遞整個參數列表,但是當被""引用時,$@不變,為多個字符串,而$*為一個字符串,並且如果這個參數列表為空,則字符串為空字符串,而非不存在.
