#!/bin/bash
jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
Этот скрипт bash выдает мне ошибку подстановки в Ubuntu. Любая помощь будет высоко оценена.
string
bash
ubuntu
substitution
Ариндам Чоудхури
источник
источник
cut
?cut -d_ -f1,2 <<< "$jobname"
иcut -d_ -f3 <<< "$jobname"
сделай этоsh script.sh
он получит ошибку «Плохая замена».Ответы:
Оболочка по умолчанию (
/bin/sh
) в Ubuntu указывает наdash
, а не наbash
.Так что, если вы
chmod +x your_script_file.sh
и затем запускаете его./your_script_file.sh
, или если вы запускаете егоbash your_script_file.sh
, он должен работать нормально.Запуск его с
sh your_script_file.sh
не будет работать, потому что строка hashbang будет проигнорирована, и сценарий будет интерпретироватьсяdash
, что не поддерживает этот синтаксис подстановки строк.источник
/bin/bash
так использует твой ответ не подходит ?! Где вы читаете, он использует/bin/sh
илиsh script.sh
?bad substitution
и я просто пытаюсь собрать информацию, но этот вопрос не помогает, потому что в нем слишком мало информации.У меня такая же проблема. Убедитесь, что ваш скрипт не имеет
в верхней части вашего сценария. Вместо этого вы должны добавить
источник
#!bin/bash
иsh script.sh
, он все еще дал мне сообщение об ошибке. Потом./script.sh
работает.#!/bin/bash
также исправит плохую замену .#!
строка используется только тогда, когда вы выполняете сценарий напрямую. Если вы используетеsh script.sh
линию полностью игнорируется.Для тех, кто прибывает сюда, это точное сообщение также появится при использовании синтаксиса переменной env для команд, например,
${which sh}
вместо правильного$(which sh)
источник
Синтаксис вашего скрипта правильный bash и хорош.
Возможные причины сбоя:
Вы на
bash
самом деле не bash, аksh
какая-то другая оболочка, которая не понимает подстановку параметров bash. Потому что ваш скрипт выглядит нормально и работает с bash. Сделайтеls -l /bin/bash
и проверьте, что это действительно bash, а не sym-связанный с какой-либо другой оболочкой.Если у вас есть bash в вашей системе, то, возможно, вы выполняете свой скрипт неправильно, как:
ksh script.sh
илиsh script.sh
(и ваша оболочка по умолчанию не bash). Так как у вас есть правильный Шебанг, если у вас есть Bash./script.sh
илиbash ./script.sh
должно быть в порядке.источник
/bin/bash
(не/bin/sh
) когда-либо были связаны с другой оболочкой.Попробуйте запустить скрипт явно, используя команду bash, а не просто выполнить его как исполняемый файл.
источник
sh script
иbash script
... мое предложение :)Также убедитесь, что у вас нет пустой строки для первой строки вашего скрипта.
т.е. убедитесь, что
#!/bin/bash
это самая первая строка вашего сценария.источник
Не относится к вашему примеру, но вы также можете получить
Bad substitution
ошибку в Bash для любого синтаксиса замещения, который Bash не распознает. Это могло быть:bash -c '${x }'
bash -c '${x;-}'
bash -c '${x@Q}'
до Bash 4.4.Если у вас есть несколько замен в одном выражении, Bash может не очень помочь в определении проблемного выражения. Например:
источник
Bad substitution
поэтому я решил включить случай, с которым мы столкнулись. (Это было@Q
в Bash 4.3, скрывающемся в длинном многострочном выражении.)@Q
добавлении вbash-4.4
.Оба - bash или dash - работают, но синтаксис должен быть:
источник
Похоже, что "+ x" вызывает проблемы:
источник
Я дважды добавлял знак доллара в выражение с фигурными скобками в bash:
вместо того
источник
Я обнаружил, что эта проблема вызвана помеченным ответом или у вас есть строка или пробел перед объявлением bash
источник