0

我正在阅读我的 .bashrc 并注意到以下内容

cd "$@" && some_other_function

$@ 到底是什么意思?

4

5 回答 5

5

"$@"展开为引用的命令行参数列表。它与"$*": given

set "a b" c d

"$*"扩展到

"a b c d"

"$@"扩展为

"a b" c d

$*(或$@)展开为

a b c d

也就是说, "$*"生成单个字符串但"$@"复制原始引​​用,$*丢失引用。

于 2012-04-12T23:18:25.647 回答
2

它是所有位置参数,每个都用双引号引起来。http://tldp.org/LDP/abs/html/internalvariables.html#APPREF

于 2012-04-12T23:18:13.467 回答
1

来自man bash

@
展开为位置参数,从一开始。当扩展出现在双引号内时,每个参数都扩展为一个单独的单词。即 "$@" 等价于 "$1" "$2" ... 如果双引号展开出现在一个单词中,则第一个参数的展开与原词的开头部分连接,展开的最后一个参数与原始单词的最后一部分连接。

于 2012-04-12T23:17:59.483 回答
1

$@ 表示传递给脚本的所有参数。

如果您像这样调用名为 foo.sh 的脚本:

$>  foo.sh boo goo loo

$@的输出将是这样的:

 > boo goo loo
于 2012-04-12T23:18:34.763 回答
0

$@为空时,$@不展开为空字符串;它被完全删除。所以你的测试不是:

[ -n "" ]

反而:

[ -n ]

Now-n不是一个运算符,而只是一个非空字符串,它总是测试为真。

于 2013-08-07T07:10:09.900 回答