Команда не найдена ошибка в присвоении переменной 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.

893   4  

4 ответов:

вы не можете иметь пробелы вокруг вашего знака'='.

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

STR = "foo"

bash пытается выполнить команду с именем STR с 2 аргументами (строки '=' и '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 гласит:

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

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

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

Comments

    Ничего не найдено.