Поиск по сайту:
Мастер находить оправдания редко бывает мастером в чем-нибудь еще (Б. Франклин).

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

19.05.2022
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

 

Читать  Bashtop - отличный монитор ресурсов Linux, написанный на Bash

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

#!/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}"

 

Читать  Поднимите уведомления Home Assistant на новый уровень с помощью ntfy.sh

Теперь, когда код обновлен и пробелы удалены, мы должны выполнить этот файл с помощью инструкции 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

 

Читать  Как установить и использовать Curl на CentOS 8

Пример 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.

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Разработка веб-приложений стала необходимой потребностью для межотраслевых предприятий для поддержания жесткой…

Спасибо!

Теперь редакторы в курсе.