아래 변수 할당의 차이점은 무엇입니까?
var=23
var =23
var= 23
var = 23
대입 연산자 주위의 공간에 차이가 있습니까?
답변
그것은 껍질에 달려 있습니다. 우리가 4 가지 주요 쉘 패밀리 (Bourne, csh, rc, fish) 만 본다면 :
본 가족
즉, Bourne 쉘 및 모든 변종이며 ksh
, bash
, ash
/ dash
, zsh
, yash
.
var=23
: 그것은 올바른 변수 할당 구문입니다 : 따옴표가없는 문자, 숫자 또는 밑줄로 구성=
되고 명령 인수 앞에 나타나는 따옴표 가 붙은 단어 (여기서 자체)var =23
의var
와 명령=23
(제외 등 인수zsh
곳=something
의 경로로 확장하는 특별한 연산자something
로 명령을 입력합니다. 여기에서, 당신은 가능성이 오류가 발생하는 것23
유효한 명령 이름이 될 가능성이있다).var= 23
:var=
명령 이름 뒤에 오는 지정23
. 그것은 환경 ( 빈 값을 가진 환경 변수)으로 전달 되어 실행23
됩니다 .var=
var
var = 23
, 및var
명령을 인수로 사용하십시오. 예를 들어 보십시오 .=
23
echo = 23
Csh 가족
csh
그리고 tcsh
. 변수 할당에는 set var = value
스칼라 변수, set var = (a b)
배열, setenv var value
환경 변수, @ var=1+1
할당 및 산술 평가 구문 이 있습니다 .
그래서:
var=23
바로 호출하는var=23
명령을 사용합니다.var =23
인수로var
명령을 호출합니다=23
.var= 23
인수로var=
명령을 호출합니다.23
var = 23
인수var
와 함께=
및23
인수로 명령을 호출합니다 .
Rc 가족
그건 rc
, es
하고 akanga
. 이러한 껍질, 배열 변수이며 할당으로되어 var = (foo bar)
함께 var = foo
짧게되고 var = (foo)
(하나 개와 배열 foo
요소)와 var =
위한 짧은 var = ()
(NO 요소 어레이를 사용 var = ''
하나 개 빈 요소 어레이의 경우).
어쨌든 빈칸 (공백 또는 탭) =
은 허용되며 선택 사항입니다. 따라서이 쉘에서이 4 개의 명령은 var = (23)
하나의 요소가있는 배열을 할당하는 것과 동일하며 동등합니다 23
.
물고기
에서 fish
, 변수 할당 구문입니다 set var value1 value2
. 에서처럼 rc
변수는 배열입니다.
따라서 동작은 이름 과 함께 명령을 실행할 수 없다는 csh
점을 제외하고는와 동일합니다 . 이러한 명령이 있으면 예 를 들어 다음을 통해 호출해야합니다 ..fish
=
sh
sh -c 'exec weird===cmd'
모든 그래서 var=23
하고 var= 23
당신에게 오류를 제공합니다 var =23
부르는 것 var
으로 명령을 =23
인수로하고 var = 23
부르는 것 var
와 명령 =
및 23
인수로.
답변
var=23
변수에 23을 할당합니다 var
.
var =23
var
인수와 함께 명령 (또는 별명 또는 함수)을 실행하려고합니다.=23
var = 23
그러나 논쟁 =
과23
var= 23
세트 var
빈 문자열로 환경 변수는 다음 명령을 실행23
예, 쉘은 프로그래밍 언어로 이상합니다. 그러나 공백은 명령과 인수를 구분하는 대화식 사용 을위한 쉘로 완벽하게 이해됩니다 . 대부분의 “특수 문자”( =
이 경우)는 명령에 대한 거의 임의의 인수를 허용하기 위해 특정 위치에서만 특별한 의미를 갖습니다. 위의 해석을 참조하십시오.
답변
var=23
변수에 값을 할당하기위한 올바른 구문입니다.var =23
명령var
에 대한=23
옵션 / 인수가있는 명령 으로 간주됩니다var
(인수 / 옵션에 대한 올바른 / 표준 구문은-option
또는--option
)var= 23
var
공백은 할당 프로세스를 중단하고23
다른 명령으로 간주되므로 아무것도 할당하지 않습니다 . 해결 방법은 공백을 저장var=\ 23
하거나var=' 23'
저장하는 것입니다.-
var = 23
두 번째 경우 에서 설명한 것과 비슷한 효과가 있습니다.실제로 이러한 유형의 공간 사용
=
은 일반적으로 내부의 테스트 조건에서 사용됩니다[[ ]]
. 배쉬 예제 :string1 = string2 True if the strings are equal. = should be used with the test command for POSIX conformance. When used with the [[ command, this performs pattern matching as described above (Compound Commands).
그리고 공백의 동작은 =
쉘과 프로그래밍 언어에 달려 있습니다.