이 질문은 너무나 기초적이어서 나 자신뿐만 아니라 이 용어를 처음 접하는 다른 사람들에게도 묻곤 한다.변수 대체그리고 다음과 같은 생각을 해보세요.
내가 아는 한 이 단어는변수 대체"한 변수의 값을 다른 변수의 값으로 바꾸십시오"라고 설명되어 있지만 그것이 맞는지 의심됩니다.
왜 이 작업에 "텍스트 편집기에서 수동으로 편집하여 변수 값을 변경합니까?"라고 말하는 대신 특별한 용어가 필요한지 궁금합니다.
무엇인가요변수 대체쉘 프로그래밍의 개념, 답을 알고 있다면 작업에 어떤 유형의 작업을 사용하는지 실제 예를 들어주세요.
답변1
특정 변수의 값을 다른 변수의 값으로 바꿉니다.
이 설명은 여러 면에서 잘못되었습니다. 변수 대체 대체이름변수(일부 구문 오류 포함)값. 또한 "in" 변수에서 작동하지 않고 명령에서 작동합니다. 명령은 변수의 값을 설정하는 명령일 수 있지만 이는 많은 경우 중 하나일 뿐입니다.
예를 들어, 이 명령은 echo $foo
변수 값을 표시합니다. 소스 코드가 포함되어 있으며 $foo
해당 출력에는 변수 값이 포함되어 있습니다 foo
.
이것을 "변수 대체"라고 부르는 이유는 쉘이 일련의 문자열(및 문자열 목록) 변환을 통해 작동하기 때문입니다. 예를 들어 (단순화) 명령을 고려하십시오 ls -l $dir/*.$ext
. 이를 평가하려면 몇 가지 일이 순서대로 이루어져야 합니다.
- 쉘은 명령을 구문 분석하고 이를 세 단어(
ls
,-l
및 )로 분할하기 시작합니다$dir/*.$ext
. - 세 번째 단어에서 쉘은 두 개의 변수 대체가 수행되어야 함을 확인합니다(이 문맥에서 달러 기호가 의미하는 바가 바로 이것이다).
dir
is 값과 is 값을 가정하면/some/path
쉘은 다음과 같이 다시 작성합니다. 이는 달러 이름 구문이 각 변수의 값을 대체하기 때문입니다.ext
txt
$dir/*.$ext
/some/path/*.txt
- 쉘은 와일드카드 패턴을
/some/path/*.txt
일치하는 파일 이름 목록으로 확장합니다. - 쉘은
ls
계산된 매개변수를 사용하여 실행됩니다.
(문법$foo
변수의 값만 바꾸지 마세요.그러나 그것은 또 다른 이야기입니다. )
대부분의 프로그래밍 언어에서는 변수의 값을 얻으려면 변수 이름을 쓰면 됩니다. 쉘은 대화형으로 사용하도록 설계되었습니다. 이름을 쓰면 리터럴 문자열로 해석됩니다. 이것이 바로 변수 값을 가져오는 구문에 "변수 값을 가져오고 싶습니다"라는 추가 태그가 있는 이유입니다.
이 작업에 단순히 "텍스트 편집기에서 수동으로 편집하여 변수 값을 변경합니다"라고 말하는 대신 특별한 용어가 필요한 이유는 무엇입니까?
변수 대체는 변수 값 변경과 관련이 없습니다. 변수의 값을 변경하는 것은일.
물론 다른 명령과 마찬가지로 할당에는 변수 대체가 포함될 수 있습니다. 그러나 변수 대체는 할당을 위해 특별히 설계된 것이 아닙니다.
또한 편집기를 사용하여 변수 값을 변경할 수 없습니다. 선언된 변수는 모든 프로세스에서 값을 가지며 시스템 구성이 아닙니다. 구성 파일을 사용하여 설정할 수 있습니다.초기의변수 값은 편집기를 사용하여 이러한 파일의 초기 값을 변경할 수 있지만 나중에 값을 변경할 수 있습니다.