【发布时间】:2016-05-06 01:30:43
【问题描述】:
谁能提供一个shell脚本示例来说明$*和$@之间的区别?
以下是我的脚本,但是看不出区别。谁能举个例子?
$ cat internalVar.sh
#!/bin/bash
# internalVar.sh var1 var2
echo "\$? = " $?
export IFS="_"
echo "\$@ = " $@ " == several parameters?"
j=1
for i in $@
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
$@ = 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
【问题讨论】:
-
您的脚本无法区分,因为它没有使用适当的引号。如果没有正确引用,没有没有区别(并且您会遇到很多错误)。
-
@CharlesDuffy Duh,当然有副本。我一定以为“这不是在问
var = val,它一定是新的;) -
谢谢大家,我明白了。