11

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

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

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

4

1 回答 1

10

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

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

于 2013-08-19T17:42:12.243 回答