
이 질문은 아주 기초적이어서 나 자신뿐만 아니라 이 용어를 접하는 다른 신입생들에게도 묻고 싶다.변수 대체그리고 다음과 같은 생각을 가지십시오.
내가 이해하는 한, 용어는변수 대체"변수의 값을 다른 변수로 대체"라고 설명하지만 그것이 맞는지 의심됩니다.
이 작업에 왜 "텍스트 편집기에서 수동으로 편집하여 변수 값을 변경합니까?"라고 말하는 대신 특수 용어가 필요한지 궁금했습니다.
무엇인가요변수 대체쉘 프로그래밍의 개념과 답을 알고 있다면 작업에서 어떤 유형의 작업을 사용하는지에 대한 실제 예를 들어주세요.
답변1
주어진 변수의 값을 다른 변수로 대체합니다.
그 설명은 여러 면에서 잘못되었습니다. 변수 대체는이름변수에 의한 변수(및 일부 구문적 보풀)값. 또한 변수 "내"에서 작동하지 않고 명령에서 작동합니다. 명령은 변수의 값을 설정하는 명령일 수 있지만 이는 많은 경우 중 하나일 뿐입니다.
예를 들어, 이 명령은 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
변수의 값을 대체하는 것 이상의 역할을 합니다.하지만 그것은 또 다른 이야기입니다.)
대부분의 프로그래밍 언어에서는 변수의 값을 얻으려면 변수 이름을 쓰면 됩니다. 쉘은 대화형으로 사용하도록 설계되었습니다. 이름을 쓰면 리터럴 문자열로 해석됩니다. 그렇기 때문에 변수의 값을 가져오는 구문에 "변수의 값을 가져오고 싶습니다"라고 표시하는 추가 표시가 있습니다.
이 작업에 "텍스트 편집기에서 수동으로 편집하여 변수 값을 변경하는" 대신 특수 용어가 필요한 이유는 무엇입니까?
변수 대체는 변수 값 변경과 관련이 없습니다. 변수의 값을 변경하는 것은과제.
물론 할당에는 다른 명령과 마찬가지로 변수 대체가 포함될 수 있습니다. 그러나 변수 대체는 할당을 위해 특별히 설계되지 않았습니다.
또한 편집기를 사용하여 변수 값을 변경할 수 없습니다. 이미 선언된 변수는 각 프로세스마다 값을 가지며 시스템 구성이 아닙니다. 다음을 설정하는 구성 파일을 가질 수 있습니다.초기의변수의 값을 지정하고 편집기를 사용하여 해당 파일의 초기 값을 변경할 수 있지만 그 이후에는 값이 변경될 수 있습니다.