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