$*和[email protected]是Shell的特殊變量,作用都是擷取傳遞給腳本或函數的所有參數。在沒有被雙引号包圍時,兩者沒有差別,都是将接受到的每個參數都是獨立的,用空格分隔。也就是說下面兩段代碼是等效的。
for var in [email protected]
do
echo ${var}
done
}
for var in $*
do
echo ${var}
done
}
當被雙引号包圍時,[email protected]與沒有被雙引号包圍時沒有變化,每個參數依然是獨立的。但是$*被雙引号包圍時,會将所有參數看作一個整體。下面兩段代碼的結果是不同的。
for var in "[email protected]"
do
echo ${var}
done
}
for var in "$*"
do
echo ${var}
done
}
假設傳遞給腳本的參數是a b c,則前三段代碼結果為:
a
b
c
第四段代碼結果為:
a b c