2009-09-27 11:40 shell中$*與$@的區別
關於$* 和 $@的 一點 認識 同是菜鳥一起學習
$*
所有的位置參數,被作為一個單詞.
注意:"$*"必須被""引用.
$@
與$*同義,但是每個參數都是一個獨立的""引用字串,這就意味著參數被完整地傳遞,
並沒有被解釋和擴充.這也意味著,每個參數列表中的每個參數都被當成一個獨立的
單詞.
注意:"$@"必須被引用.
$@ $* 只在被雙引號包起來的時候才會有差異
雙引號括起來的情況:
$*將所有的參數認為是一個欄位
$@以IFS(預設為空白格)來劃分欄位,如果空格在“”裡面,不劃分。採用LS的指令碼運行./test 1 "2 3" 4 來發現差異
沒有括起來的情況是$@和$*一樣的,見到IFS就劃分欄位。還是採用LS的指令碼運行./test 1 "2 3" 4 來發現差異
一個小例子 ,僅供參考
[Copy to clipboard]
[ - ]CODE:#!/bin/bash
echo
index=1
echo "Listing args with\"\$*\":"
for arg in "$*"
do
echo "Arg #$index=$arg"
let "index+=1"
done
echo "所有的參數被認為是一個單詞"
echo
index=1
echo "Listing args with \"\$@\":"
for arg in "$@"
do
echo "Arg #$index=$arg"
let "index+=1"
done
echo "所有的參數被認為是各個獨立的單詞"
echo
index=1
echo "Listing args with \$* (未被引用):"
for arg in $*
do
echo "Arg #$index=$arg"
let "index+=1"
done
echo "所有的參數被認為是各個獨立的單詞"
exit 0
運行後輸出為
[Copy to clipboard]
[ - ]CODE:[root@localhost ABS]# ./test 1 2 3 4
Listing args with"$*":
Arg #1=1 2 3 4
所有的參數被認為是一個單詞
Listing args with "$@":
Arg #1=1
Arg #2=2
Arg #3=3
Arg #4=4
所有的參數被認為是各個獨立的單詞
Listing args with $* (未被引用):
Arg #1=1
Arg #2=2
Arg #3=3
Arg #4=4
所有的參數被認為是各個獨立的單詞
[ 本帖最後由 一路征程一路笑 於 2008-7-20 09:52 編輯 ]