Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux shell脚本中的$@和$*之间有什么区别?_Linux_Bash_Shell - Fatal编程技术网

Linux shell脚本中的$@和$*之间有什么区别?

Linux 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

在my
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