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