[bash] Bash 변수 할당에서 명령을 찾을 수 없음 오류

test.sh라는 스크립트가 있습니다.

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

내가 실행할 때 나는 sh test.sh이것을 얻는다 :

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

내가 무엇을 잘못하고 있지? 나는 매우 기초적인 / 초보자 bash 스크립팅 튜토리얼을 온라인에서 봤는데 이것이 변수를 선언하는 방법입니다 … 그래서 내가 뭘 잘못하고 있는지 잘 모르겠습니다.

우분투 서버 9.10에 있습니다. 그리고 bash는에 있습니다 /bin/bash.



답변

‘=’기호 주위에 공백이있을 수 없습니다.

당신이 쓸 때 :

STR = "foo"

bash는 2 개의 인수 (문자열 ‘=’및 ‘foo’)와 함께 STR이라는 명령을 실행하려고합니다.

당신이 쓸 때 :

STR =foo

bash는 1 개의 인수 (문자열 ‘= foo’)와 함께 STR이라는 명령을 실행하려고합니다.

당신이 쓸 때 :

STR= foo

bash는 환경에서 STR을 빈 문자열로 설정하여 foo 명령을 실행하려고 시도합니다.

이것이 명확히하는 데 도움이되는지 또는 단순히 난독 화인지 확실하지 않지만 다음 사항에 유의하십시오.

  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

Johannes가 말했듯이 분명히 (!) 주위에는 공간이 없습니다 =. =대화식 모드에서 주위에 공간이 있으면 다음과 같이 오류가 발생합니다.

‘str’명령이 없습니다.


답변

나는 이것이 매우 고품질의 답변으로 대답되었다는 것을 알고 있습니다. 그러나 간단히 말해서 공백이 없습니다.

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

등호 주위의 공백으로 인해 작동하지 않았습니다. 당신이 실행한다면 …

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

작동합니다


답변

변수를 정의 할 때 추가 공백을 넣을 필요가 없습니다.

예 :

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

따라서 공백을 제거하십시오.

name="Stack Overflow" 

잘 작동합니다.


답변