#!/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
.
me@pc:~$ 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
, которая не поддерживает синтаксис подстановки строк.
/bin/bash
поэтому ваш ответ не подходит ?! Где вы читаете, он использует /bin/sh
или sh script.sh
?
У меня была та же проблема. Убедитесь, что ваш script не имеет
#!/bin/sh
вверху вашего script. Вместо этого вы должны добавить
#!/bin/bash
#!bin/bash
и sh script.sh
, он все равно дал мне сообщение об ошибке. Тогда ./script.sh
работает.
#!/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
должно быть хорошо.
/bin/bash
(не /bin/sh
) когда-либо был связан с другой оболочкой.
Для других, которые приходят сюда, это точное сообщение также появится при использовании синтаксиса env для команд, например ${which sh}
вместо правильного $(which sh)
Попробуйте выполнить script явно с помощью команды bash, а не просто выполнить ее как исполняемый файл.
sh script
и bash script
… мое предложение :)
Кроме того, убедитесь, что у вас нет пустой строки для первой строки вашего script.
то есть. убедитесь, что #!/bin/ bash является самой первой строкой вашего script.
Оба - bash или тире - работают, но синтаксис должен быть:
FILENAME=/my/complex/path/name.ext
NEWNAME=${FILENAME%ext}new