为啥 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 命令行参数需要大括号?的主要内容,如果未能解决你的问题,请参考以下文章

linux变量

shell 基础2

在 Bash 中使用[方括号] | Linux 中国

Linux操作系统基础解析之——Bash(Shell)基础知识

bash 如何展开命令行

Shell 编程基础