Что такое подстановка переменных в программировании оболочки?

Что такое подстановка переменных в программировании оболочки?

Этот вопрос очень простой, и я задаю его не только себе, но и другим новичкам, которые видят этот термин.замена переменнойи у меня есть следующие мысли:

Насколько я понимаю, этот терминзамена переменнойописывает "подстановку значения переменной в другую", но я сомневаюсь, что это правильно.
Мне было интересно, почему это действие требует специального термина, а не просто "изменение значения переменной с помощью редактирования вручную в текстовом редакторе"?

Чтозамена переменнойконцепция в программировании оболочки, и если вы знаете ответ, пожалуйста, приведите практический пример того, какие типы действий она использует в вашей работе.

решение1

подстановка значения одной переменной в другую.

Это описание неверно по нескольким пунктам. Замена переменной заменяетимяпеременной (плюс немного синтаксической ерунды) по ееценить. Более того, он работает не «в» переменной, а в команде. Команда может быть той, которая устанавливает значение переменной, но это лишь один случай из многих.

Например, команда echo $fooотображает значение переменной. Исходный код содержит $foo, а соответствующий вывод содержит значение переменной foo.

Причина, по которой это называется «заменой переменных», заключается в том, что оболочка работает с помощью серии преобразований строк (и списков строк). Например (упрощенно), рассмотрим команду ls -l $dir/*.$ext. Чтобы оценить ее, несколько вещей происходят последовательно:

  1. Оболочка начинает анализировать команду и разбивает ее на три слова: ls, -lи $dir/*.$ext.
  2. В третьем слове оболочка видит две подстановки переменных для выполнения (именно это означают знаки доллара в этом контексте). Допустим, что значение равно , dirа /some/pathзначение extравно txt, тогда оболочка переписывает $dir/*.$extв /some/path/*.txt. Это подстановка, поскольку значение каждой переменной заменяется на синтаксис имени доллара.
  3. Оболочка расширяет шаблон подстановочных знаков /some/path/*.txtдо списка совпадающих имен файлов.
  4. Оболочка выполняется lsс вычисленными аргументами.

(Синтаксис$foo делает больше, чем просто подставляет значение переменнойно это уже другая история.)

В большинстве языков программирования, чтобы взять значение переменной, вы просто пишете имя переменной. Оболочка разработана для интерактивного использования; если вы пишете имя, оно интерпретируется как литеральная строка. Вот почему синтаксис для взятия значения переменной имеет дополнительный маркер, который говорит: «Я хочу взять значение переменной».

почему для этого действия требуется специальный термин, а не просто «изменение значения переменной путем ее ручного редактирования в текстовом редакторе»?

Замена переменной не имеет ничего общего с изменением значения переменной. Изменение значения переменной — этоназначение.

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

Более того, вы не можете изменить значение переменной с помощью редактора. Уже объявленная переменная имеет значение в каждом процессе, это не системная конфигурация. Вы можете иметь файлы конфигурации, которые устанавливаютисходныйзначение переменной, и вы можете использовать редактор, чтобы изменить это начальное значение в этих файлах, но после этого значение может измениться.

Связанный контент