다음 변수 할당의 차이점은 무엇입니까?
var=23
var =23
var= 23
var = 23
대입 연산자 주위의 공백이 어떤 차이를 가져옵니까?
답변1
많은 것은 케이싱에 달려 있습니다. 4개의 주요 쉘 계열(Bourne, csh, rc, fish)만 살펴보면 다음과 같습니다.
번 가족
이것은 Bourne 쉘과 그 모든 변형 ksh
, , bash
, ash
/ dash
, 입니다 zsh
.yash
var=23
: 이것은 올바른 스칼라 변수 할당 구문입니다. 따옴표가 없는 문자, 숫자 또는 밑줄로 구성된 단어와=
명령 인수 앞에 나타나는 따옴표가 없는 단어(여기서만)입니다.var =23
, as 매개변수var
가 있는 명령=23
(in은 명령 경로로 확장되는 특수 연산자zsh
인 경우 는 제외됩니다. 여기서는 유효한 명령 이름이 아닐 가능성이 높기 때문에 오류가 발생할 수 있습니다 ).=something
something
23
var= 23
:할당var=
뒤에는 명령 이름이 옵니다23
. 이는23
실행할 환경(널 값이 있는 환경 변수)으로 전달하는 것을 의미합니다 .var=
var
var = 23
,var
명령은=
및23
매개변수를 사용합니다.echo = 23
예를 들어 시도해 보세요.
ksh
, zsh
및 일부 양식도 지원합니다 bash
.yash
대량으로/목록구문 변경 변수배포 및 확장을 위해. ksh93
, zsh
또한 bash
지원합니다연관 배열3. 구문이 ksh93
다릅니다.복합변수그리고유형, 객체 프로그래밍 언어의 객체와 클래스를 연상시킵니다.
Ces 가족
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
. 이러한 셸에서 변수는 배열이고 할당은 with var = (foo bar)
, var = foo
short for with var = (foo)
(1개의 요소가 있는 배열 foo
) 및 var =
short for var = ()
(요소가 없는 배열, 빈 요소가 있는 배열의 경우 var = ''
또는 사용)입니다.var = ('')
어떤 경우에도 주변 공백(공백 또는 탭)은 =
허용되며 선택 사항입니다. 따라서 이러한 쉘에서 이 4개의 명령은 var = (23)
요소 배열을 할당하는 것과 동일합니다 23
.
물고기
에서 fish
변수 할당 구문은 입니다 set var value1 value2
. 에서처럼 rc
변수는 배열입니다.
따라서 이름에 a가 포함된 명령을 csh
실행할 수 없다는 점을 제외하면 동작은 with 와 동일합니다 . 그러한 명령이 있는 경우 예를 들어 호출 해야 합니다.fish
=
sh
sh -c 'exec weird===cmd'
따라서 모든 var=23
및 var= 23
오류는 명령을 인수로 var =23
호출 하고 명령을 인수로 호출하는 것입니다.var
=23
var = 23
var
=
23
답변2
var=23
변수에 23을 할당합니다 var
.
var =23
var
인수를 사용하여 명령(또는 별칭 또는 함수)을 실행해 보세요.=23
var = 23
위와 동일하지만 인수 =
와23
var= 23
환경 변수를 var
빈 문자열로 설정하고 명령을 실행하십시오.23
예, 쉘은 프로그래밍 언어로서 이상합니다. 하지만 그것은 전적으로 의미가 있습니다껍데기대화형 사용을 위해 공백이 명령과 인수를 구분합니다. 대부분의 "특수 문자"( =
이 경우)는 명령에 대한 거의 임의의 인수를 허용하기 위해 특정 위치에서만 특별한 의미를 갖습니다. 위의 설명을 참조하세요.
답변3
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).
결국 주변 공백의 동작은 =
쉘과 프로그래밍 언어에 따라 다릅니다.