Почему аргументы командной строки bash после 9 требуют фигурных скобок?

Это может быть не самый вызывающий размышлений вопрос, но тем не менее поразил мое любопытство. Я не смог найти какой-либо ответ (не говоря уже об окончательном) в Интернете.

При чтении Advanced Shell Scripting я столкнулся с этим разделом в отношении позиционных аргументов командной строки, в которых говорится, что все, что после девятого аргумента должно быть окружено ${} ( более длинная форма переменной ссылки/замены).

Проще говоря, почему вы должны ссылаться на аргумент командной строки десять (и далее) как ${10}, ${11}... вместо $10, $11, ...?

Ответ 1

В частности, ваш вопрос относится к "позиционным параметрам". Использование $var вместо ${var} является сокращением в bash. В большинстве случаев он работает хорошо. Bash переменные должны начинаться с буквы или подчеркивания. Он внутренне обрабатывает переменные, начинающиеся с цифры как "позиционный параметр". Когда Bash обнаруживает позиционный параметр, он смотрит только на первую цифру, поэтому $10 возвращает $1 "0". Вызывая ${10}, вы инструктируете Bash посмотреть на полную переменную, а не на встроенную по умолчанию первую цифру.

Как это так? Понятия не имею. Наследие, которое было расширено, - это мое предположение. "Кому когда-нибудь понадобится больше, чем....?"