这可能不是最引人深思的问题,但却引起了我的好奇心。我无法在网上找到任何答案(更不用说确定的答案)了。
在阅读Advanced Shell Scripting时,我遇到this section关于命令行位置参数的问题,该参数声明第九个参数之后的任何内容必须被$ {}(变量引用/替换的较长形式)包围。
简单地说,为什么必须将命令行参数10(及更高版本)引用为${10}, ${11}...
而不是$10, $11, ...
?
答案 0 :(得分:7)
具体来说,您的问题与“位置参数”有关。使用$ var而不是$ {var}是bash中的简写。在大多数情况下,它运作良好。 Bash变量必须以字母或下划线开头。它在内部将以数字开头的变量视为“位置参数”。当bash检测到位置参数时,它只查看第一个数字,这就是$ 10返回$ 1“0”的原因。通过调用$ {10},您正在指示bash查看完整变量而不是其内置的第一个数字的默认值。
至于为什么会这样?我不知道。扩展的遗留实施是我的猜测。 “谁会比......更需要?”