【问题标题】:When the argument of a function is an environment variable, how does GNU Bash handle it?当函数的参数是环境变量时,GNU Bash 如何处理它?
【发布时间】:2020-07-04 12:29:37
【问题描述】:

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

format() {
  printf "%s\n" $1 | tr ":" "\n" | nl
}
$ format $PATH
        1 /Applications/Visual\

当我把$1改成$@时,$PATH的所有内容都可以输出了:

format() {
  printf "%s\n" $@ | tr ":" "\n" | nl
}
$ format $PATH
        1 /Applications/Visual\
        2   Studio\
...

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

【问题讨论】:

  • 参数不是参数;其扩展的结果是。始终引用您的参数扩展。
  • 只要使用nl <<< "${PATH//:/$'\n'}"

标签: bash environment-variables


【解决方案1】:

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

【讨论】:

  • 原来是这样,我明白了,谢谢。如果使用“...”,可以保证一个字符串参数,避免这个问题。
猜你喜欢
  • 2014-07-10
  • 2013-03-28
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
相关资源
最近更新 更多