
Этот вопрос очень простой, и я задаю его не только себе, но и другим новичкам, которые видят этот термин.замена переменнойи у меня есть следующие мысли:
Насколько я понимаю, этот терминзамена переменнойописывает "подстановку значения переменной в другую", но я сомневаюсь, что это правильно.
Мне было интересно, почему это действие требует специального термина, а не просто "изменение значения переменной с помощью редактирования вручную в текстовом редакторе"?
Чтозамена переменнойконцепция в программировании оболочки, и если вы знаете ответ, пожалуйста, приведите практический пример того, какие типы действий она использует в вашей работе.
решение1
подстановка значения одной переменной в другую.
Это описание неверно по нескольким пунктам. Замена переменной заменяетимяпеременной (плюс немного синтаксической ерунды) по ееценить. Более того, он работает не «в» переменной, а в команде. Команда может быть той, которая устанавливает значение переменной, но это лишь один случай из многих.
Например, команда echo $foo
отображает значение переменной. Исходный код содержит $foo
, а соответствующий вывод содержит значение переменной foo
.
Причина, по которой это называется «заменой переменных», заключается в том, что оболочка работает с помощью серии преобразований строк (и списков строк). Например (упрощенно), рассмотрим команду ls -l $dir/*.$ext
. Чтобы оценить ее, несколько вещей происходят последовательно:
- Оболочка начинает анализировать команду и разбивает ее на три слова:
ls
,-l
и$dir/*.$ext
. - В третьем слове оболочка видит две подстановки переменных для выполнения (именно это означают знаки доллара в этом контексте). Допустим, что значение равно ,
dir
а/some/path
значениеext
равноtxt
, тогда оболочка переписывает$dir/*.$ext
в/some/path/*.txt
. Это подстановка, поскольку значение каждой переменной заменяется на синтаксис имени доллара. - Оболочка расширяет шаблон подстановочных знаков
/some/path/*.txt
до списка совпадающих имен файлов. - Оболочка выполняется
ls
с вычисленными аргументами.
(Синтаксис$foo
делает больше, чем просто подставляет значение переменнойно это уже другая история.)
В большинстве языков программирования, чтобы взять значение переменной, вы просто пишете имя переменной. Оболочка разработана для интерактивного использования; если вы пишете имя, оно интерпретируется как литеральная строка. Вот почему синтаксис для взятия значения переменной имеет дополнительный маркер, который говорит: «Я хочу взять значение переменной».
почему для этого действия требуется специальный термин, а не просто «изменение значения переменной путем ее ручного редактирования в текстовом редакторе»?
Замена переменной не имеет ничего общего с изменением значения переменной. Изменение значения переменной — этоназначение.
Конечно, назначение может содержать подстановки переменных, как и любая другая команда. Но подстановки переменных не предназначены специально для назначений.
Более того, вы не можете изменить значение переменной с помощью редактора. Уже объявленная переменная имеет значение в каждом процессе, это не системная конфигурация. Вы можете иметь файлы конфигурации, которые устанавливаютисходныйзначение переменной, и вы можете использовать редактор, чтобы изменить это начальное значение в этих файлах, но после этого значение может измениться.