Ошибка «Команда не найдена» при присвоении переменной в Bash
У меня есть скрипт под названием test.sh:
#!/bin/bash
STR = "Hello World"
echo $STR
Когда я запускаю sh test.sh
, я получаю следующее сообщение об ошибке:
test.sh: line 2: STR: command not found
В чем моя ошибка? Я смотрел очень простые уроки по написанию скриптов на bash, и то, как они советуют объявлять переменные, именно так я и сделал. Поэтому не совсем понимаю, что делаю не так.
Я на Ubuntu Server 9.10. И да, bash находится по пути /bin/bash
.
5 ответ(ов)
Вам нужно убрать пробелы вокруг знака =
в вашей строке присваивания переменной. Вот исправленный код:
#!/bin/bash
STR="Hello World"
echo $STR
Обратите внимание, что в Bash пробелы вокруг знака =
недопустимы при присваивании значений переменным. Если вы оставите пробелы, то Bash не сможет корректно распознать вашу переменную.
В интерактивном режиме всё выглядит хорошо:
$str="Hello World"
$echo $str
Hello World
Очевидно(!), как сказал Йоханнес, между =
не должно быть пробелов. Если вокруг =
есть пробелы, то в интерактивном режиме возникнут ошибки, например:
No command 'str' found
Вопрос: Почему в этом скрипте bash не работает присваивание строки с пробелами?
#!/bin/bash
STR = "Hello World"
echo $STR
Ответ: Проблема в том, что в bash нельзя оставлять пробелы вокруг знака равенства при присваивании переменных. Попробуйте убрать пробелы, и код заработает:
#!/bin/bash
STR="Hello World"
echo $STR
Таким образом, переменная STR
будет правильно инициализирована, и при выполнении скрипта вы получите ожидаемый результат.
Когда вы определяете переменную, не нужно добавлять лишние пробелы.
Например:
name = "Stack Overflow"
// это неверно, вы получите ошибку с сообщением - "Команда не найдена"
Поэтому уберите пробелы:
name="Stack Overflow"
И всё будет работать корректно.
В дополнение к принятому ответу, использование дефисов в имени переменной также приведет к той же ошибке. Удалите -
, чтобы избавиться от ошибки.
STR-STR="Hello World"
bash: STR-STR=Hello World: command not found
Как выводить команды оболочки по мере их выполнения
Как объявить и использовать логические переменные в shell-скрипте?
Разница между sh и Bash
Когда нужны фигурные скобки вокруг переменных в оболочке?
Как получить пароль из оболочки без вывода в терминал?