Linux shell脚本中的$@和$*之间有什么区别?
在myLinux shell脚本中的$@和$*之间有什么区别?,linux,bash,shell,Linux,Bash,Shell,在myscript.sh中: aa=$@ bb=$* echo $aa echo $bb 运行时: source script.sh a b c d e f g 我得到: a b c d e f g a b c d e f g $@和$*之间有什么区别?在$*和$@之间没有区别,但是“$@”和“$*之间有区别 我们为脚本提供了三个参数(a、bc和d),但在“$*”中,它们都合并为一个参数abcd $ sh 2.sh a "b c" d $ ls -l total 24 -rw-r--r
script.sh
中:
aa=$@
bb=$*
echo $aa
echo $bb
运行时:
source script.sh a b c d e f g
我得到:
a b c d e f g
a b c d e f g
$@
和$*
之间有什么区别?在$*
和$@
之间没有区别,但是“$@”
和“$*
之间有区别
我们为脚本提供了三个参数(a
、bc
和d
),但在“$*”中,它们都合并为一个参数abcd
$ sh 2.sh a "b c" 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 a b c d
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 b c
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 d
您可以在这里看到,“$*”
表示始终只有一个参数,“$@”
包含的参数与脚本中的参数一样多。“$@”是一个特殊标记,表示“将每个单独的参数用引号括起来”。因此,a“b c”d
变成(或者说保持)a“b c”d而不是“a b c d”
(“$*”
)或“a”b“c”d
($@
或$*
)
此外,我还推荐这本主题优美的读物:
@mat为什么谷歌没有找到所有其他的重复项?@0x90:google没有索引“标点符号”,只有单词;试着做这样的事情。
$ sh 2.sh a "b c" 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 a b c d
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 b c
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 d