bash - script - sh variables




Команда не обнаружила ошибку в присвоении переменной Bash (3)

У меня есть этот скрипт под названием test.sh:

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

когда я запускаю sh test.sh я получаю следующее:

test.sh: line 2: STR: command not found

Что я делаю неправильно? Я смотрю на базовые / новички bash-скриптов, обучающие онлайн, и вот как они говорят, чтобы объявлять переменные ... Поэтому я не уверен, что я делаю неправильно.

Я на сервере Ubuntu 9.10. И да, bash находится в /bin/bash .


В интерактивном режиме все выглядит нормально

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

Очевидно! как сказал Йоханнес, нет места вокруг '='. В случае, если есть какое-либо пространство вокруг '=', то в интерактивном режиме он дает ошибки как `

Команда 'str' не найдена


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

Например

name = ""  
// it is not valid, you will get an error saying- "Command not found"

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

name="" 

и он будет работать нормально.


У вас не может быть пробелов вокруг вашего знака «=».

Когда вы пишете:

STR = "foo"

bash пытается запустить команду STR с двумя аргументами (строки «=» и «foo»)

Когда вы пишете:

STR =foo

bash пытается запустить команду STR с 1 аргументом (строка '= foo')

Когда вы пишете:

STR= foo

bash пытается запустить команду foo с STR, установленным в пустую строку в своей среде.

Я не уверен, что это помогает прояснить или это просто обфускация, но обратите внимание, что:

  1. первая команда в точности эквивалентна: STR "=" "foo" ,
  2. вторая такая же, как STR "=foo" ,
  3. и последнее эквивалентно STR="" foo .

В соответствующем разделе спецификации языка sh, раздел 2.9.1, указывается:

«Простая команда» представляет собой последовательность необязательных назначений переменных и перенаправления в любой последовательности, необязательно сопровождаемых словами и перенаправлениями, которые завершаются оператором управления.

В этом контексте word - это команда, которую bash будет запускать. Любая строка, содержащая = (в любой позиции, отличной от начала строки), которая не является перенаправлением, является присвоением переменной, тогда как любая строка, которая не является перенаправлением и не содержит = является командой. В STR = "foo" STR не является присвоением переменной.





variable-assignment