Возможно, вы столкнулись с проблемой неправильного синтаксиса подстановки при разработке сценариев Bash. Просмотрев форумы, вы можете обнаружить, что вы не одиноки; другие люди сталкиваются с той же ошибкой. Это типографская ошибка, возникающая при запуске сценария оболочки, и это может произойти по разным причинам. Неправильное использование подстановки команд и ошибочные символы, добавленные к программе, являются двумя основными причинами этого.
Давайте посмотрим, как мы можем заставить наш сценарий оболочки вызывать эту ошибку и как ее устранить. Начните с нового файла bash, созданного с помощью команды touch Ubuntu, и откройте его в редакторе «GNU Nano».
$ touch sub.sh $ nano sub.sh
Первая причина ошибки плохой подстановки — использование неправильного синтаксиса кода. Давайте посмотрим на это. Начиная с первого кода 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
Еще одна причина возникновения ошибок плохой подстановки в 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
Эта ошибка также может возникать из-за использования повторяющихся нежелательных символов в коде. Итак, мы попробовали обновленный код, чтобы получить эту ошибку в оболочке. Для этого нам нужно дважды использовать символ «$» в операторе «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
Давайте рассмотрим последний, но не менее важный пример этой статьи. Мы использовали две переменные, 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.