ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Решить проблему: неверная замена Bash

Bash Heredoc

Возможно, вы столкнулись с проблемой неправильного синтаксиса подстановки при разработке сценариев Bash. Просмотрев форумы, вы можете обнаружить, что вы не одиноки; другие люди сталкиваются с той же ошибкой. Это типографская ошибка, возникающая при запуске сценария оболочки, и это может произойти по разным причинам. Неправильное использование подстановки команд и ошибочные символы, добавленные к программе, являются двумя основными причинами этого.

Давайте посмотрим, как мы можем заставить наш сценарий оболочки вызывать эту ошибку и как ее устранить. Начните с нового файла bash, созданного с помощью команды touch Ubuntu, и откройте его в редакторе «GNU Nano».

$ touch sub.sh
$ nano sub.sh

 

Пример 01

Первая причина ошибки плохой подстановки — использование неправильного синтаксиса кода. Давайте посмотрим на это. Начиная с первого кода bash, мы добавили поддержку bash в первую строку скрипта bash, т.е. «#!/bin/bash». После этого мы инициализировали простую переменную «V» командой списка Ubuntu в качестве значения. Это значение было вставлено в фигурные скобки со знаком «$», чтобы рассматривать его как команду оболочки. После этого оператор echo просто отображает значение переменной «v» в оболочке. Наш код завершен и готов к использованию.

#!/bin/bash
V=${ls -al}
echo "$V"

 

Мы сохранили код bash и вернулись в терминал после использования Ctrl+S и Ctrl+X соответственно. Мы выполнили этот недавно созданный файл сценария bash с помощью инструкции «bash» и получили «плохую замену» здесь, на нашем экране. Эта ошибка возникла из-за использования фигурных скобок «{}» вокруг инструкции списка в коде.

$ bash sub.sh

 

Давайте попробуем обновить наш код, чтобы устранить эту ошибку сейчас. Итак, мы удалили фигурные скобки из второй строки кода и заменили их простыми скобками «()», как показано ниже. В целом, код останется прежним, поскольку проблем с кодом нет. Сохраните этот код сейчас.

#!/bin/bash
V=$(ls -al)
echo "$V"

 

После выхода из редактора GNU nano мы выполним обновленный код файла bash «sub.sh» с использованием инструкции «bash», как показано ниже. Оказывается, после обновления кода ошибка плохой подстановки была устранена, а инструкция списка, вставленная в переменную «v», успешно выполнена. Команда list отображала все текущее содержимое домашнего каталога, т. е. файлы и папки, на экране нашей оболочки.

$ bash sub.sh

 

Пример 02

Еще одна причина возникновения ошибок плохой подстановки в bash — использование ненужных пробелов при выполнении некоторых переменных. Итак, мы добавили поддержку bash и инициализировали переменную «V» с инструкцией списка в ней как значение, заключенное в простые скобки и знак доллара «$». После этого мы использовали оператор «echo» для отображения значения переменной «v». Но мы добавили переменную «V» в оператор «echo» вместе с «пробелом» в скобках.

#!/bin/bash
V=$(ls -l)
echo "${V }"

 

После сохранения этого кода мы выполнили этот файл bash с запросом «bash» в нашем терминале, как показано ниже. Он возвращает замену bash в 3- й строке скрипта.

$ bash sub.sh

 

Чтобы удалить ошибку из нашего кода, мы должны обновить наш код. Итак, мы снова открыли файл и удалили лишнее пространство в фигурных скобках оператора «echo», как показано ниже.

#!/bin/bash
V=$(ls -l)
echo "${V}"

 

Теперь, когда код обновлен и пробелы удалены, мы должны выполнить этот файл с помощью инструкции bash, представленной ниже. После запуска файла ошибка неправильной подстановки была устранена, и инструкция списка, указанная в переменной «V», была успешно выполнена на терминале после выполнения оператора «echo» в сценарии bash. Список текущих файлов и папок домашнего каталога отображается на экране нашей оболочки ниже.

$ bash sub.sh

 

Пример 03

Эта ошибка также может возникать из-за использования повторяющихся нежелательных символов в коде. Итак, мы попробовали обновленный код, чтобы получить эту ошибку в оболочке. Для этого нам нужно дважды использовать символ «$» в операторе «echo», чтобы указать переменную «V» для выполнения, что является неправильным синтаксисом для этого. Эта переменная «v» содержит в качестве значения простую инструкцию списка. Поскольку мы использовали двойной знак «$» в фигурных скобках и вне их в операторе «echo», это приведет нас к ошибке подстановки при выполнении.

#!/bin/bash
V=$(ls -l)
echo "${$V}"

 

После запуска кода с инструкцией bash мы столкнулись с ошибкой неправильной подстановки в строке 3 сценария bash на экране нашей оболочки.

$ bash sub.sh

 

Давайте удалим ошибку плохой подстановки из выполнения, обновив строку 3 кода. Мы удалили внутренний знак «$» в фигурных скобках из инструкции «echo».

#!/bin/bash
V=$(ls -l)
echo "${V}"

 

После удаления знака «$» мы снова выполнили код в оболочке с помощью команды «bash». Ошибка была устранена, и список файлов и папок был отображен.

$ bash sub.sh

 

Пример 04

Давайте рассмотрим последний, но не менее важный пример этой статьи. Мы использовали две переменные, x и y, содержащие в качестве значения расположение каталога. В операторе «echo» этого кода мы использовали обе переменные, которые должны быть напечатаны и разделены знаком «/». Каждая переменная содержит знак доллара, при этом один знак доллара также используется вне фигурных скобок.

#!/bin/bash
x=/home/linux/Desktop 
y=TEST 
echo ${$x/$y}

 

Использование фигурных скобок и знаков доллара приводило к ошибочной подстановке.

$ bash sub.sh

 

Итак, мы удалили фигурные скобки и внешний знак доллара, как показано ниже.

#!/bin/bash
x=/home/linux/Desktop 
y=TEST 
echo $x/$y

 

На этот раз было отображено значение обеих переменных.

$ bash sub.sh

 

Вывод

Это все о иллюстрации создания кода bash к ошибкам, вызывающим ошибку неправильной подстановки во время выполнения. Мы обсудили, что можно и что нельзя делать, чтобы избежать ошибки при выполнении различных примеров bash.

Exit mobile version