Почему я не могу использовать шаблоны подстановки в переменных назначениях?

В bash это работает:

var1=abc

Но это дает ошибку:

var*1=abc
var*1=abc: command not found

Почему так? Почему выражение рассматривается как команда?

3 ответа

Решение

С http://www.gnu.org/software/bash/manual/bashref.html

название

Слово, состоящее только из букв, цифр и символов подчеркивания и начинающееся с буквы или символа подчеркивания. Имена используются как имена переменных и функций оболочки. Также называется идентификатором.

Значение с левой стороны не является идентификатором. Это выражение. Поэтому эта команда (для оценки всего выражения) является недействительной.

Другими словами, у вас не может быть звездочек в именах, и вы не можете сгенерировать имя переменной, выполнив некоторую математику (умножение).

Неверный символ (звездочка) для идентификатора переменной.

POSIX определяет имена переменных оболочки, которые состоят из буквенно-цифровых символов и подчеркивания, а не начинаются с цифры. (Существуют специальные переменные, которые нарушают это; они всегда являются одиночными символами и не могут конфликтовать с пользовательскими переменными.)

3.230 Имя

В языке команд оболочки слово, состоящее исключительно из символов подчеркивания, цифр и алфавита из переносимого набора символов. Первый символ имени не является цифрой.

Другие вопросы по тегам