7

Ошибка «Команда не найдена» при присвоении переменной в Bash

25

У меня есть скрипт под названием 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 ответ(ов)

2

Вам нужно убрать пробелы вокруг знака = в вашей строке присваивания переменной. Вот исправленный код:

#!/bin/bash
STR="Hello World"
echo $STR

Обратите внимание, что в Bash пробелы вокруг знака = недопустимы при присваивании значений переменным. Если вы оставите пробелы, то Bash не сможет корректно распознать вашу переменную.

0

В интерактивном режиме всё выглядит хорошо:

$str="Hello World"
$echo $str
Hello World

Очевидно(!), как сказал Йоханнес, между = не должно быть пробелов. Если вокруг = есть пробелы, то в интерактивном режиме возникнут ошибки, например:

No command 'str' found

0

Вопрос: Почему в этом скрипте bash не работает присваивание строки с пробелами?

#!/bin/bash
STR = "Hello World"
echo $STR

Ответ: Проблема в том, что в bash нельзя оставлять пробелы вокруг знака равенства при присваивании переменных. Попробуйте убрать пробелы, и код заработает:

#!/bin/bash
STR="Hello World"
echo $STR

Таким образом, переменная STR будет правильно инициализирована, и при выполнении скрипта вы получите ожидаемый результат.

0

Когда вы определяете переменную, не нужно добавлять лишние пробелы.

Например:

name = "Stack Overflow"  
// это неверно, вы получите ошибку с сообщением - "Команда не найдена"

Поэтому уберите пробелы:

name="Stack Overflow" 

И всё будет работать корректно.

0

В дополнение к принятому ответу, использование дефисов в имени переменной также приведет к той же ошибке. Удалите -, чтобы избавиться от ошибки.

STR-STR="Hello World"
bash: STR-STR=Hello World: command not found
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь