shell編程之腳本參數$@,$*,$#,$$,$?的含義


#首先按順序解釋各個參數的含義

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: []

 

結論

$*,$@一樣,都是傳遞整個參數列表,但是當被""引用時,$@不變,為多個字符串,而$*為一個字符串,並且如果這個參數列表為空,則字符串為空字符串,而非不存在.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM