Команда не найдена ошибка в назначении переменной Bash

у меня этот скрипт называется 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.

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" 

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