天天看點

Shell特殊變量$*與[email protected]的差別

$*和[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
           

繼續閱讀