相关疑难解决方法(0)

$* 和 $@ 有什么区别?

考虑以下代码:

foo () {
    echo $*
}

bar () {
    echo $@
}

foo 1 2 3 4
bar 1 2 3 4
Run Code Online (Sandbox Code Playgroud)

它输出:

1 2 3 4

1 2 3 4

我正在使用 Ksh88,但我也对其他常见的 shell 感兴趣。如果您碰巧知道特定 shell 的任何特殊性,请务必提及它们。

我在 Solaris 上的 Ksh 手册页中找到了以下内容:

$* 和 $@ 的含义在不引用或用作参数赋值或文件名时是相同的。然而,当用作命令参数时,$* 等价于 ``$1d$2d...'',其中 d 是 IFS 变量的第一个字符,而 $@ 等价于 $1 $2 ....

我尝试修改IFS变量,但它不会修改输出。也许我做错了什么?

shell ksh quoting arguments

119
推荐指数
6
解决办法
4万
查看次数

$@ 和 $* 有什么区别

根据这个页面, $@ 和 $* 做几乎相同的事情:

The $@ holds list of all arguments passed to the script. 
The $* holds list of all arguments passed to the script.
Run Code Online (Sandbox Code Playgroud)

在谷歌搜索所有热门搜索后,我找不到任何解释为什么会有 2 个看似重复的语法。

它们在我的脚本中的工作方式似乎相同。

cat foo.sh
#!/bin/bash
echo The parameters passed in are $@
echo The parameters passed in are $*

./foo.sh herp derp
The parameters passed in are herp derp
The parameters passed in are herp derp
Run Code Online (Sandbox Code Playgroud)
  1. 一个比另一个更受欢迎吗?
  2. 为什么有 2 个内置变量来做完全相同的事情?

其他来源
bash.cyberciti.biz

shell bash

97
推荐指数
4
解决办法
14万
查看次数

我应该使用 $* 还是 $@?

使用哪种$*或哪种$@更好(在数组语法、命令行参数等中)以避免代码中的任何错误/问题?或者它没有任何区别?

shell parameter shell-script quoting

12
推荐指数
0
解决办法
485
查看次数

标签 统计

shell ×3

quoting ×2

arguments ×1

bash ×1

ksh ×1

parameter ×1

shell-script ×1