У меня есть этот скрипт с именем 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
.
#!/usr/bin/env bash
вместо того, чтобы ставить напрямую,#!/bin/bash
если вы не увереныbash
в том,/bin
что вы находитесь из-за этого ответа: stackoverflow.com/a/21613044/3589567Ответы:
У вас не должно быть пробелов вокруг знака «=».
Когда вы пишете:
bash пытается запустить команду с именем STR с 2 аргументами (строки '=' и 'foo')
Когда вы пишете:
bash пытается запустить команду с именем STR с 1 аргументом (строка '= foo')
Когда вы пишете:
bash пытается запустить команду foo с STR, установленным в пустую строку в своем окружении.
Я не уверен, поможет ли это уточнить или это просто запутывание, но учтите, что:
STR "=" "foo"
,STR "=foo"
,STR="" foo
.Соответствующий раздел спецификации языка sh, раздел 2.9.1, гласит:
В этом контексте a
word
- это команда, которую собирается запустить bash. Любая строка, содержащая=
(в любой позиции, отличной от начала строки), которая не является перенаправлением, является присваиванием переменной, в то время как любая строка, которая не является перенаправлением и не содержит,=
является командой. ВSTR = "foo"
,STR
это не присвоение переменной.источник
FOO-BAR=qux
не является присвоением переменной, посколькуFOO-BAR
не является допустимым именем.Оставьте пробелы вокруг
=
знака:источник
set foo = bar
и обычная ошибка в пакетных файлах Windows, - и там язык пакета высмеивается за это ;-)В интерактивном режиме все выглядит нормально:
Очевидно (!), Как сказал Йоханнес, вокруг нет места
=
. Если=
в интерактивном режиме есть свободное место, выдается ошибка:источник
STR = "Hello World"
, так что этот ответ здесь не применим.$
маркеЯ знаю, что на это ответили очень качественным ответом. Но, короче говоря, у вас не может быть пробелов.
Не работал из-за пробелов вокруг знака равенства. Если бы ты бежал ...
Это будет работать
источник
Когда вы определяете какую-либо переменную, вам не нужно вводить лишние пробелы.
Например
Итак, удалите пробелы:
и это будет работать нормально.
источник