当函数的参数是环境变量时,GNUBASH如何处理它?

当函数的参数是环境变量时,GNUBASH如何处理它?,bash,environment-variables,Bash,Environment Variables,当我使用$1时,将$PATH传递给函数将只输出控制台中的第一行: format() { printf "%s\n" $1 | tr ":" "\n" | nl } 当我将$1更改为$@时,$PATH的所有内容都可以输出: format() { printf "%s\n" $@ | tr ":" "\n" | nl } 我看到GNU Bash的文档中说$1代表第一个参

当我使用$1时,将$PATH传递给函数将只输出控制台中的第一行:

format() {
  printf "%s\n" $1 | tr ":" "\n" | nl
}
当我将$1更改为$@时,$PATH的所有内容都可以输出:

format() {
  printf "%s\n" $@ | tr ":" "\n" | nl
}

我看到GNU Bash的文档中说$1代表第一个参数,如果传递了多个参数,$@代表所有参数,但这里我只传递了一个参数$PATH,为什么要使用$@来获取$PATH的所有内容?

GNU Bash默认情况下是按空格分隔参数。 $@用于捕获函数的所有参数。
您的PATH变量可能有一些路径,其中包含空格,这导致您的输入参数分成多个由空格分隔的字符串

事实证明是这样的,我理解,谢谢。如果使用…,则可以保证一个字符串参数,从而避免此问题;其扩张的结果是。始终引用参数展开式。只需使用nl
format() {
  printf "%s\n" $@ | tr ":" "\n" | nl
}
$ format $PATH
        1 /Applications/Visual\
        2   Studio\
...