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

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

다음 변수 할당의 차이점은 무엇입니까?

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인 경우 는 제외됩니다. 여기서는 유효한 명령 이름이 아닐 가능성이 높기 때문에 오류가 발생할 수 있습니다 ).=somethingsomething23
  • 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=23var=23명령을 호출하면 됩니다 .
  • var =23var매개변수를 사용하여 명령이 호출됩니다 =23.
  • var= 23var=매개변수를 사용하여 명령 호출23
  • var = 23명령은 및 인수를 사용하여 호출됩니다 var.=23

RC 가족

rc, , es그리고 akanga. 이러한 셸에서 변수는 배열이고 할당은 with var = (foo bar), var = fooshort 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=shsh -c 'exec weird===cmd'

따라서 모든 var=23var= 23오류는 명령을 인수로 var =23호출 하고 명령을 인수로 호출하는 것입니다.var=23var = 23var=23

답변2

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

var =23var인수를 사용하여 명령(또는 별칭 또는 함수)을 실행해 보세요.=23

var = 23위와 동일하지만 인수 =23

var= 23환경 변수를 var빈 문자열로 설정하고 명령을 실행하십시오.23

예, 쉘은 프로그래밍 언어로서 이상합니다. 하지만 그것은 전적으로 의미가 있습니다껍데기대화형 사용을 위해 공백이 명령과 인수를 구분합니다. 대부분의 "특수 문자"( =이 경우)는 명령에 대한 거의 임의의 인수를 허용하기 위해 특정 위치에서만 특별한 의미를 갖습니다. 위의 설명을 참조하세요.

답변3

  • var=23변수에 값을 할당하는 올바른 구문입니다.
  • var =23var명령 =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).
    

결국 주변 공백의 동작은 =쉘과 프로그래밍 언어에 따라 다릅니다.

관련 정보