$ @不像其他变量那样 - 为什么?

时间:2017-08-03 19:50:42

标签: bash shell

我正在使用特殊情况变量$ @将用户的参数传递给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”作为单个参数,因为它以双引号传递给函数。

我不完全理解为什么,也无法找到答案。洞察力将不胜感激!

0 个答案:

没有答案