2016-05-06 8 views
0

$*[email protected]の違いを表示するシェルスクリプトの例を教えてもらえますか?

私のスクリプトはですが、の違いは分かりません。誰かが良い例を挙げることができますか?

$ cat internalVar.sh 
#!/bin/bash 
# internalVar.sh var1 var2 
echo "\$? = " $? 
export IFS="_" 
echo "\[email protected] = " [email protected] " == several parameters?" 
j=1 
for i in [email protected] 
do 
    echo "var $j = $i" 
    j=$((j+1)) 
done 
echo "\$* = " $* " == a single string" 
j=1 
for i in $* 
do 
    echo "var $j = $i" 
    j=$((j+1)) 
done 
echo "\$# = " $# 
echo "\$0 = " $0 
echo "\$$ = " $$ 


$ export IFS="c" 
[$ ./internalVar.sh par1 "par meter 2" par3 
$? = 0 
[email protected] = par1 par meter 2 par3 == several parameters? 
var 1 = par1 
var 2 = par meter 2 
var 3 = par3 
$* = par1 par meter 2 par3 == a single string 
var 1 = par1 
var 2 = par meter 2 
var 3 = par3 
$# = 3 
$0 = ./internalVar.sh 
$$ = 4638 
+1

適切な引用符を使用していないため、あなたのスクリプトは違いを知ることができません。引用符を正しく付けないと、違いはありません(また、バグがたくさんあります)。 –

+0

@CharlesDuffy Duh、もちろん、重複があります。私は "var = val"について質問していない、それは新しいものでなければならないと思ったに違いない) –

+0

ありがとう、私はそれを得た。 –

答えて

3

方法については、この:

$ set 'arg1a arg1b' 'arg2a arg2b' 'arg3a arg3b' 
$ for arg in "[email protected]"; do echo "$arg"; done 
arg1a arg1b 
arg2a arg2b 
arg3a arg3b 
$ for arg in "$*"; do echo "$arg"; done 
arg1a arg1b arg2a arg2b arg3a arg3b 
$ for arg in [email protected]; do echo "$arg"; done 
arg1a 
arg1b 
arg2a 
arg2b 
arg3a 
arg3b 
$ for arg in $*; do echo "$arg"; done 
arg1a 
arg1b 
arg2a 
arg2b 
arg3a 
arg3b 

これは最初のケース"[email protected]"各位置パラメータに対して別々のパラメータであり、第2の場合において、単一の文字列を"$*"膨張、をループ。

引用符で囲まれていない3番目と4番目の場合は、単語の分割を実行し、お互いに違いはありません。

the manual「特殊パラメータ」も参照してください。

関連する問題