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 명령을 실행하려고 시도합니다.
이것이 명확히하는 데 도움이되는지 또는 단순히 난독 화인지 확실하지 않지만 다음 사항에 유의하십시오.
- 첫 번째 명령은 정확히 다음과 같습니다
STR "=" "foo"
. - 두 번째는와 동일합니다
STR "=foo"
. - 마지막은와 같습니다
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"
잘 작동합니다.