为啥 9 之后的 bash 命令行参数需要大括号?
Posted
技术标签:
【中文标题】为啥 9 之后的 bash 命令行参数需要大括号?【英文标题】: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
解释为 $12
(并且不允许 $12
AFAICR)。
【参考方案1】:
具体来说,您的问题与“位置参数”有关。使用 $var 而不是 $var 是 bash 中的简写。在大多数情况下,它运作良好。 Bash 变量必须以字母或下划线开头。它在内部将以数字开头的变量视为“位置参数”。当 bash 检测到位置参数时,它只查看第一个数字,这就是 $10 返回 $1"0" 的原因。通过调用 $10 您指示 bash 查看完整的变量,而不是其内置的第一个数字的默认值。
至于为什么会这样?我不知道。我的猜测是已扩展的旧版实现。 “谁会需要更多……?”
【讨论】:
以上是关于为啥 9 之后的 bash 命令行参数需要大括号?的主要内容,如果未能解决你的问题,请参考以下文章