쉘 스크립트에서 다음 두 예제의 차이점은 무엇입니까?
set variable1 "value"
set variable2 value
답변1
쉘 스크립트에서 value
및 "value"
및는 'value'
동일합니다. 따옴표 사용 여부를 선택할 수 있습니다. 따옴표가 존재하는 이유는 때때로 특별한 의미를 갖는 문자열에 문자를 넣고 싶을 때, 따옴표를 통해 특수 문자가 문자열의 일부임을 쉘에 알릴 수 있기 때문입니다. 예를 들어:
var=value more
var='value more'
var="value more"
var=value\ more
첫 번째 줄은 value
이름이 지정된 변수에 값(5자 문자열)을 할당합니다 var
. 는 환경 변수가 로 설정된 프로그램을 more
실행하도록 하는 공백이 앞에 오기 때문에 이 명령에 대해 별도의 단어입니다 . 다른 세 줄은 모두 같은 의미를 갖습니다. 변수를 값 (6번째 문자가 문자열인 10자 문자열)으로 설정하기만 하면 됩니다. 작은따옴표는 문자열을 묶습니다 . 인용의 세 번째 가능성은 백슬래시로, 단순히 다음 문자를 인용합니다.more
var
value
var
value more
'…'
"…"
작은따옴표와 큰따옴표의 차이점은 작은따옴표 사이에서는 각 문자가 자신을 나타내지만 큰따옴표 사이에서는 일부 문자가 여전히 해석된다는 것입니다. 특히 는 "\\"
단일 백슬래시를 포함하는 문자열입니다. 왜냐하면 문자열의 백슬래시는 다음 문자에 대한 따옴표로 해석되기 때문입니다. 큰 "\""
따옴표만 포함하는 문자열"\$var"
은 달러 기호 문자열로 시작하는 4자 문자열입니다. 변수의 값인 문자열입니다 . 대신 달러 기호로 시작하는 4자 문자열 과 백슬래시로 시작하는 5자 문자열입니다."$var"
var
'$var'
'\$var'
여기서는 책이나 매뉴얼을 읽지 않고 인용에 대해 자세히 설명하지 않을 더 미묘한 부분이 있습니다(예:배쉬 매뉴얼) 자세한 내용과 찾아보기를 원하시면인용하다이 사이트에 태그를 지정하세요.
이 set
명령은아니요변수에 값을 할당합니다. set variable value
변수에 값을 할당하지 않고 variable
구문은 다음과 같습니다 variable=value
. set
이 명령의 기능은 스크립트(또는 함수)의 매개변수를 바꾸는 것입니다. 매개변수가 포함된 스크립트를 실행하면 이름 대신 숫자가 있는 스크립트의 특수 변수( $1
, $2
, ...) 에서 매개변수를 사용할 수 있습니다. 이러한 변수를 위치 매개변수라고 합니다(스크립트/함수에 대한 인수이기 때문에 매개변수, 매개변수 목록의 위치에 따라 액세스되기 때문에 위치 매개변수). 숫자()를 사용하여 이러한 변수에 할당할 수는 없지만 인수를 사용하여 실행하여 모든 위치 매개변수를 설정할 수 있습니다. 1=foo
set
예를 들어:
#!/bin/sh
echo "$1"
set hello world
echo "$1"
이 스크립트는 명령줄에 전달된 첫 번째 인수를 인쇄한 다음 내장된 다른 작업이 있습니다 hello
.set
수동자세한 내용은.
set
기본 쉘 프로그래밍의 경우 지금은 이 사용법을 잊어도 됩니다. 인용의 기본이 중요합니다. 당신이 알아야 할 한 가지는 변수 확장 주위에 항상 큰따옴표를 사용하는 것입니다. 즉 , "$foo"
plain 은 사용하지 마십시오 $foo
.단순히 $foo
가치를 파괴한다.
이 답변에서 제가 쓴 모든 내용은 Bourne/POSIX 스타일 쉘( sh
, dash
, zsh 등에 관한 것입니다. bash
) ksh
구문이 다른 덜 일반적인 쉘 제품군이 있습니다. (t)csh에는 set
일부 할당이 포함되어 있지만 등호는 여전히 포함되어 있습니다. \'"
다소 유사하지만 완전히 동일하지는 않습니다. 물고기에서는 set variable value
변수를 참조하는 값이 variable
다소 유사하지만 완전히 동일하지는 않습니다.value
\'"