변수 "값" 설정과 변수 값 설정의 차이점은 무엇입니까?

변수 "값" 설정과 변수 값 설정의 차이점은 무엇입니까?

쉘 스크립트에서 다음 두 예제의 차이점은 무엇입니까?

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자 문자열)으로 설정하기만 하면 됩니다. 작은따옴표는 문자열을 묶습니다 . 인용의 세 번째 가능성은 백슬래시로, 단순히 다음 문자를 인용합니다.morevarvaluevarvalue 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\'"

관련 정보