我正在使用特殊情况变量$ @将用户的参数传递给shell脚本中的已定义函数。 Bash手册指出$ @:
如果在单词中出现双引号扩展,则第一个参数的扩展与原始单词的开头部分连接,并且最后一个参数的扩展与原始单词的最后部分连接。 / p>
这让我相信我可以简单地用双引号将变量括在其他单词中。例如:"You said: $@"
。但是,这似乎不像我预期的那样有效。
我已经整理了一个小的shell脚本来帮助调试我使用$ @传递参数时遇到的问题。
#!/usr/bin/env bash
showArgs() {
while [ "$1" != "" ]; do
echo "Arg: $1"
shift
done
}
VAR1="Quoted variable"
VAR2="Unquoted variable"
echo 1
showArgs "Quoted hardcoded"
echo 2
showArgs Unquoted hardcoded
echo 3
showArgs "$VAR1"
echo 4
showArgs $VAR2
echo 5
showArgs $@
echo 6
showArgs "$@"
使用./showArgs Foo bar "bax qux"
调用它,每个案例都会按照我的预期显示出来。但是,我希望案例#6是“Foo bar bax qux”作为单个参数,因为它以双引号传递给函数。
我不完全理解为什么,也无法找到答案。洞察力将不胜感激!