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

У меня есть этот скрипт под названием 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 = "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 будет запускать. Любая строка, содержащая = (в любой позиции, отличной от начала строки), которая не является redirectм, является присвоением переменной, тогда как любая строка, которая не является redirectм и не содержит = является командой. В STR = "foo" STR не является присвоением переменной.

Оставьте пробелы вокруг знака = :

 #!/bin/bash STR="Hello World" echo $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" 

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

  • Сравнение строк с ==, которые объявлены окончательными в Java
  • Алгоритм поиска нескольких совпадений строк
  • Как форматировать строки в Java
  • Проверьте, соответствует ли строка регулярному выражению в сценарии Bash
  • как преобразовать строку в дату в mysql?
  • Выключение строки C ++
  • Java разделяет строку на массив
  • Найти строку текста в элементе и обернуть вокруг него tags span
  • Как объявить и использовать логические переменные в сценарии оболочки?
  • Как преобразовать String в ArrayList?
  • В C # следует ли использовать string.Empty или String.Empty или "" для инициализации строки?
  • Interesting Posts

    Линукс с двойной загрузкой с поддержкой виртуализации с универсальным доступом к папке / разделу данных

    Показать последние уведомления в Windows 8?

    Что произойдет, если я определяю массив 0-размера в C / C ++?

    Уничтожьте и затем создайте новый объект, используя одну и ту же переменную

    Получение объекта из выражения MemberExpression?

    Отключить кнопки запуска webkit на тип ввода = «номер»?

    jQuery: первый против .first ()

    Объектная ориентация в C

    Значение изменения App.Config

    Как я могу реализовать функции ослабления с помощью streamа

    Воспроизведение локального (жесткого диска) видеофайла с помощью тега HTML5?

    Загрузочная карусель с несколькими кадрами одновременно

    Bash Templating: Как создать файлы конфигурации из шаблонов с Bash?

    Почему для 64-разрядной версии Windows 7 требуется больше памяти, чем 32-разрядная?

    Какой лучший API для чтения листов Excel в java – JXL или Apache POI

    Давайте будем гением компьютера.