Команда не найдена ошибка в присвоении переменной Bash
у меня есть этот скрипт называется test.sh:
#!/bin/bash
STR = "Hello World"
echo $STR
когда я запускаю sh test.sh Я получаю это:
test.sh: line 2: STR: command not found
что я делаю не так? Я смотрю на чрезвычайно простые / начинающие bash scripting tutorials онлайн, и вот как они говорят, чтобы объявить переменные... Так что я не уверен, что я делаю неправильно.
Я на Ubuntu Server 9.10. И да, Баш находится по адресу /bin/bash.
4 ответов:
вы не можете иметь пробелы вокруг вашего знака'='.
когда вы пишете:
STR = "foo"bash пытается выполнить команду с именем STR с 2 аргументами (строки '=' и 'foo')
когда вы пишете:
STR =foobash пытается выполнить команду с именем STR с 1 аргументом (строка '=foo')
когда вы пишете:
STR= foobash пытается выполнить команду 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"и это будет работать нормально.
Comments