我正在阅读我的 .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
不是一个运算符,而只是一个非空字符串,它总是测试为真。