Баш: плохая замена
#!/bin/bash
jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
этот сценарий bash дает мне плохая замена ошибка на Ubuntu.
Я пытаюсь разделить jobname на два: job_201312161447 и 0003. Это дает эту ошибку только тогда, когда я пытаюсь запустить это на Ubuntu.
любая помощь будет высоко ценится.
7 ответов:
командный интерпретатор по-умолчанию (
/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 будет проигнорирована и скрипт будет интерпретироватьсяdash, который не поддерживает этот синтаксис строки замены.
у меня была та же проблема. Убедитесь, что ваш скрипт не имеет
#!/bin/shв верхней части вашего скрипта. Вместо этого, вы должны добавить
#!/bin/bash
ваш синтаксис скрипта является допустимым 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должно быть нормально.
для других, которые прибывают сюда, это точное сообщение также появится при использовании синтаксиса переменной env для команд, например
${which sh}вместо правильного$(which sh)
попробуйте запустить скрипт явно с помощью команды bash, а не просто выполнить его как исполняемый файл.