Команда не найдена ошибка в назначении переменной 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
.
4 ответов
вы не можете иметь пробелы вокруг вашего знака'='.
когда вы пишете:
STR = "foo"
bash пытается запустить команду с именем STR с 2 аргументами (строки '=' и 'foo')
когда вы пишете:
STR =foo
bash пытается запустить команду с именем STR с 1 аргументом (строка '=foo')
когда вы пишете:
STR= foo
bash пытается запустить команду foo с STR, установленной в пустую строку в ее окружающая среда.
Я не уверен, помогает ли это прояснить или это просто запутывание, но обратите внимание, что:
- первая команда в точности соответствует:
STR "=" "foo"
, - второй такой же, как
STR "=foo"
, - и последнее эквивалентно
STR="" foo
.
соответствующий раздел спецификация языка sh, раздел 2.9.1 гласит:
"простая команда" последовательность необязательные назначения переменных и перенаправления в любой последовательности, необязательно сопровождаемые словами и перенаправлениями, завершаются оператором управления.
в этом контексте a word
это команда, которую bash собирается запустить. Любая строка, содержащая =
(в любой позиции, кроме начала строки), которая не является перенаправлением, является назначением переменной, в то время как любая строка, которая не является перенаправлением и не содержит =
- это команда. В STR = "foo"
, STR
не является присвоением переменной.
в интерактивном режиме все выглядит нормально
$ str="Hello World"
$ echo $str
Hello World
очевидно ! как сказал Йоханнес, вокруг " = " нет места. В случае, если есть какое-либо пространство вокруг"=", то в интерактивном режиме он дает ошибки как"
команда ' str ' не найдена
когда вы определяете любую переменную, вам не нужно вводить какие-либо дополнительные пробелы.
Э. Г.
name = "Stack Overflow"
// it is not valid, you will get an error saying- "Command not found"
поэтому удалите пробелы:
name="Stack Overflow"
и он будет работать нормально.