在我的script.sh
:
aa=$@ bb=$* echo $aa echo $bb
运行时:
source script.sh abcdefg
我得到:
abcdefg abcdefg
$@
和$*
什么区别?
$*
和$@
之间没有区别,但是"$@"
和"$*"
之间有区别。
$ cat 1.sh mkdir "$*" $ cat 2.sh mkdir "$@" $ sh 1.sh a "bc" d $ ls -l total 12 -rw-r--r-- 1 igor igor 11 mar 24 10:20 1.sh -rw-r--r-- 1 igor igor 11 mar 24 10:20 2.sh drwxr-xr-x 2 igor igor 4096 mar 24 10:21 abcd
我们给了脚本( a
, bc
和d
)三个参数,但是在“$ *”中它们全部被合并为一个参数abcd
。
$ sh 2.sh a "bc" d $ ls -l total 24 -rw-r--r-- 1 igor igor 11 mar 24 10:20 1.sh -rw-r--r-- 1 igor igor 11 mar 24 10:20 2.sh drwxr-xr-x 2 igor igor 4096 mar 24 10:21 a drwxr-xr-x 2 igor igor 4096 mar 24 10:21 abcd drwxr-xr-x 2 igor igor 4096 mar 24 10:21 bc drwxr-xr-x 2 igor igor 4096 mar 24 10:21 d
你可以在这里看到, "$*"
意味着总是一个单一的参数, "$@"
包含尽可能多的参数,如脚本。 “$ @”是一个特殊的标记,意思是“用引号括住每个单独的参数”。 因此a "bc" d
变成(或者说停留) "a" "bc" "d"
而不是"abcd"
( "$*"
)或"a" "b" "c" "d"
( $@
或$*
)。
另外,我会推荐这个主题的美丽阅读: