쉘 스크립트에서 변수 할당의 공백


17

아래 변수 할당의 차이점은 무엇입니까?

var=23
var =23
var= 23
var = 23

대입 연산자 주위의 공간에 차이가 있습니까?


대부분의 프로그래밍 언어에서 이것은 전혀 차이가 없습니다 ... 실제로 시작해야 할 차이점이 있습니까? 또한 당신은 여기서 oldschool를 이야기하고 있습니까? ash / zsh / bash 또는 다른 새로운 것들이 아닌가?
Cestarian

첫 번째 예제 만 변수를 설정합니다.
DisplayName

그렇다면 마지막 3 개에서 구문 오류가 발생하지 않습니까? 아니면 실제로 의미를 가지고 있습니까?
Cestarian

2
당신이라는 명령이있는 경우 @Cestarian 그들은 무언가를 의미 할 수 varvar =23통과 될 =23VAR에, 그리고 var = 23전달할 것이다 =23VAR에. 당신이있는 경우 또는,라고 명령 var=한 다음 var= 23통과 할 23명령에 var=.
표시 이름

1
@Cestarian로 교체되며 bash,이 sh경우는 4 가지 경우 모두 와 동일 합니다.
pfnuesel

답변:


14

그것은 껍질에 달려 있습니다. 우리가 4 가지 주요 쉘 패밀리 (Bourne, csh, rc, fish) 만 본다면 :

본 가족

즉, Bourne 쉘 및 모든 변종이며 ksh, bash, ash/ dash, zsh, yash.

  • var=23: 그것은 올바른 변수 할당 구문입니다 : 따옴표가없는 문자, 숫자 또는 밑줄로 구성 =되고 명령 인수 앞에 나타나는 따옴표 가 붙은 단어 (여기서 자체)
  • var =23var와 명령 =23(제외 등 인수 zsh=something의 경로로 확장하는 특별한 연산자 something로 명령을 입력합니다. 여기에서, 당신은 가능성이 오류가 발생하는 것 23유효한 명령 이름이 될 가능성이있다).
  • var= 23: var=명령 이름 뒤에 오는 지정 23. 그것은 환경 ( 빈 값을 가진 환경 변수)으로 전달 되어 실행 23됩니다 .var=var
  • var = 23, 및 var명령을 인수로 사용하십시오. 예를 들어 보십시오 .=23echo = 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=shsh -c 'exec weird===cmd'

모든 그래서 var=23하고 var= 23당신에게 오류를 제공합니다 var =23부르는 것 var으로 명령을 =23인수로하고 var = 23부르는 것 var와 명령 =23인수로.


8

var=23변수에 23을 할당합니다 var.

var =23var인수와 함께 명령 (또는 별명 또는 함수)을 실행하려고합니다.=23

var = 23그러나 논쟁 =23

var= 23세트 var빈 문자열로 환경 변수는 다음 명령을 실행23

예, 쉘은 프로그래밍 언어로 이상합니다. 그러나 공백은 명령과 인수를 구분하는 대화식 사용 을위한 쉘로 완벽하게 이해됩니다 . 대부분의 "특수 문자"( =이 경우)는 명령에 대한 거의 임의의 인수를 허용하기 위해 특정 위치에서만 특별한 의미를 갖습니다. 위의 해석을 참조하십시오.


3
  • var=23 변수에 값을 할당하기위한 올바른 구문입니다.
  • var =23명령 var에 대한 =23옵션 / 인수가있는 명령 으로 간주됩니다 var(인수 / 옵션에 대한 올바른 / 표준 구문은 -option또는 --option)
  • var= 23var공백은 할당 프로세스를 중단하고 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).

그리고 공백의 동작은 =쉘과 프로그래밍 언어에 달려 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.