當我在shell腳本上工作時,我對$ @和「$ @」問題有點不滿。所以,我寫了一個shell腳本來做一些測試。如下所示。
func()
{
local a="[email protected]"
for i in "$a"; do
echo "$i ****"
done
}
func000()
{
local a="[email protected]"
for i in $a; do
echo "$i ****"
done
}
func0()
{
local [email protected]
for i in "$a"; do
echo "$i ****"
done
}
func00()
{
local [email protected]
for i in $a; do
echo "$i ****"
done
}
func1()
{
for i in "[email protected]"; do
echo "$i ****"
done
}
func2()
{
for i in [email protected]; do
echo "$i ****"
done
}
func "a b c"
func a b c
echo "-----------"
func0 "a b c"
func0 a b c
echo "-----------"
func00 "a b c"
func00 a b c
echo "-----------"
func000 "a b c"
func000 a b c
echo "-----------"
func1 "a b c"
func1 a b c
echo "-----------"
func2 "a b c"
func2 a b c
a b c ****
a b c **** func
-----------
a b c **** func0
a b c ****
-----------
a **** func00
b ****
c ****
a ****
b ****
c ****
------------
a **** func000
b ****
c ****
a ****
b ****
c ****
-----------
a b c **** func1 //this has the result that I want.
a ****
b ****
c ****
-----------
a **** func2
b ****
c ****
a ****
b ****
c ****
據我記得,當使用$ @時,我們必須使用雙重quoate,否則會破壞。因此,我知道一些功能肯定不能正常工作。 (我仍然在測試它)
只有func1給了我一個願望結果,然而,事情是我想給變量賦「$ @」。通過審查func0,func000,func0,func00結果,這些都沒有給我正確的東西。所以,我希望有人能幫助我。
另外,我知道sh和bash有區別。如果有人能指出我在哪種情況下可能會突破,我會很高興。謝謝。
更新
我應該說,這個劇本的這個結果,它涉及到的bash或sh或linux的VS SH SH的FreeBSD的版本。
我可能是錯的,如果是的話,只是指出來,非常感謝。在我們沒有數組的情況下,顯然,數組賦值不能工作,替代方法是使用字符串,就像我在func000中所做的那樣,local a =「$ a」;因爲我在$ a;做...
如果使用linux sh 4.5(測試)或bash,請參閱下面的答案。
$ @不是一個變量,它是一個變量數組。 – anishsane
'$ @'不是一個數組('$ {@ [1]}',例如非法)。但是,引用時它的行爲是特殊的和類似數組的:''$ @「'等價於'」$ 1「」$ 2「」$ 3「...」(與「$ *」'相反,相同於「$ 1 $ 2 $ 3 $ 4」')。 – chepner
'local -a a =(「$ @」)',如果你想顯式聲明它爲一個數組。 –