我正在阅读我的 .bashrc 并注意到以下内容
cd "$@" && some_other_function
$@ 到底是什么意思?
"$@"展开为引用的命令行参数列表。它与"$*": given
set "a b" c d
"$*"扩展到
"a b c d"
而"$@"扩展为
"a b" c d
和$*(或$@)展开为
a b c d
也就是说, "$*"生成单个字符串但"$@"复制原始引用,$*丢失引用。
它是所有位置参数,每个都用双引号引起来。http://tldp.org/LDP/abs/html/internalvariables.html#APPREF
来自man bash:
@
展开为位置参数,从一开始。当扩展出现在双引号内时,每个参数都扩展为一个单独的单词。即 "$@" 等价于 "$1" "$2" ... 如果双引号展开出现在一个单词中,则第一个参数的展开与原词的开头部分连接,展开的最后一个参数与原始单词的最后一部分连接。
$@ 表示传递给脚本的所有参数。
如果您像这样调用名为 foo.sh 的脚本:
$> foo.sh boo goo loo
$@的输出将是这样的:
> boo goo loo
当$@为空时,$@不展开为空字符串;它被完全删除。所以你的测试不是:
[ -n "" ]
反而:
[ -n ]
Now-n不是一个运算符,而只是一个非空字符串,它总是测试为真。