为什么9之后的bash命令行参数需要大括号?

时间:2013-08-19 16:31:12

标签: bash shell command-line arguments

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

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

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

1 个答案:

答案 0 :(得分:7)

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

至于为什么会这样?我不知道。扩展的遗留实施是我的猜测。 “谁会比......更需要?”