#!/bin/bash
jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
Этот сценарий bash дает мне ошибку Bad substitution на Ubuntu. Любая помощь будет высоко оценена.
Оба - bash или dash - работают, но синтаксис должен быть:
FILENAME=/my/complex/path/name.ext
NEWNAME=${FILENAME%ext}new
Для других, которые приходят сюда, это точное сообщение также появляется при использовании синтаксиса env-переменных для команд, например ${which sh} вместо правильного $(which sh)
Синтаксис скрипта действителен: bash и good.
Возможные причины сбоя:
Ваш bash не действительно bash, но ksh или некоторая другая оболочка, которая не работает Не понимайте подстановку параметров bash. Потому что ваш сценарий выглядит отлично и работает с bash. Сделайте ls -l /bin/bash и проверьте, действительно ли это bash, а не sym-привязано к какой-либо другой оболочке. Если у вас есть bash на вашей системе, вы можете выполнить свой скрипт не так: ksh script.sh или sh script.sh (и ваша оболочка по умолчанию не bash). Поскольку у вас есть правильный shebang, если у вас есть bash ./script.sh или bash ./script.sh, все должно быть хорошо.Попробуйте запустить скрипт явно с помощью команды bash, а не просто выполнить его как исполняемый файл.
Кроме того, убедитесь, что у вас нет пустой строки для первой строки вашего скрипта.
т.е. убедитесь, что #! / bin / bash - это первая строка вашего скрипта.
У меня была та же проблема. Убедитесь, что ваш скрипт не имеет
#!/bin/sh
в верхней части вашего скрипта. Вместо этого вы должны добавить
#!/bin/bash