【问题标题】:Why do bash command line arguments after 9 require curly brackets?为什么 9 之后的 bash 命令行参数需要大括号?
【发布时间】:2013-08-21 12:57:39
【问题描述】:

这可能不是最发人深省的问题,但仍然引起了我的好奇心。我无法在网上找到任何答案(更不用说确定的答案了)。

在阅读 Advanced Shell Scripting 时,我遇到了 this section 关于命令行位置参数的内容,它指出第九个参数之后的任何内容都必须用 ${} (变量引用/替换的较长形式)包围。

简单地说,为什么必须将命令行参数 10(及以上)引用为 ${10}, ${11}... 而不是 $10, $11, ...

【问题讨论】:

  • 历史;原始的 Bourne shell 将 $12 解释为 ${1}2(并且不允许 ${12} AFAICR)。

标签: bash shell command-line arguments


【解决方案1】:

具体来说,您的问题与“位置参数”有关。使用 $var 而不是 ${var} 是 bash 中的简写。在大多数情况下,它运作良好。 Bash 变量必须以字母或下划线开头。它在内部将以数字开头的变量视为“位置参数”。当 bash 检测到位置参数时,它只查看第一个数字,这就是 $10 返回 $1"0" 的原因。通过调用 ${10} 您指示 bash 查看完整的变量,而不是其内置的第一个数字的默认值。

至于为什么会这样?我不知道。我的猜测是已扩展的旧版实现。 “谁会需要更多……?”

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2014-08-09
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多