【问题标题】:What is the difference between $@ and $* in shell script? [duplicate]shell脚本中的$@和$*有什么区别? [复制]
【发布时间】:2013-03-24 09:19:44
【问题描述】:

在我的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

$@$* 有什么区别?

【问题讨论】:

  • @mat 为什么谷歌没有找到所有其他重复项?
  • @0x90:谷歌不索引“标点”,只索引单词;尝试symbolhound 进行此类操作。

标签: linux bash shell


【解决方案1】:

$*$@ 之间没有区别,但 "$@""$*" 之间存在区别。

$ cat 1.sh
mkdir "$*"

$ cat 2.sh
mkdir "$@"

$ sh 1.sh a "b c" 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 a b c d

我们为脚本提供了三个参数(ab cd),但在 "$*" 中它们都被合并为一个参数 a b c d

$ 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"$@$*)。

另外,我会推荐这本关于主题的美丽读物:

http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST

【讨论】:

    猜你喜欢
    • 2018-01-23
    • 2011-02-15
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 2023-03-17
    • 2018-09-25
    相关资源
    最近更新 更多