간단한 명령의 리디렉션된 부분에서 확장이 발생합니까?

간단한 명령의 리디렉션된 부분에서 확장이 발생합니까?

Bash 매뉴얼에서

3.7.1 간단한 명령 확장

간단한 명령을 실행할 때 셸은 왼쪽에서 오른쪽으로 다음과 같은 확장, 할당 및 리디렉션을 수행합니다.

  1. 파서에 의해 변수 할당으로 표시된 단어(명령 이름 앞의 단어)와 리디렉션은 나중에 처리하기 위해 저장됩니다.

  2. 변수 할당이나 리디렉션이 아닌 단어는 확장됩니다(21 페이지의 섹션 3.5 [쉘 확장] 참조). 확장 후 남은 단어가 있는 경우 첫 번째 단어는 명령 이름으로 처리되고 나머지 단어는 인수로 처리됩니다.

  3. 리디렉션은 위에서 설명한 대로 수행됩니다(31페이지의 섹션 3.6 [리디렉션] 참조).

  4. 각 변수 할당에서 "=" 뒤에 오는 텍스트는 변수에 할당되기 전에 물결표 확장, 매개변수 확장, 명령 대체, 산술 확장 및 따옴표 제거가 적용됩니다.

간단한 명령의 명령 이름, 명령 인수 및 할당 부분에서 발생하는 확장에 대해 언급합니다.

리디렉션 부분도 확장되는지 궁금합니다. 그렇다면 몇 가지 예를 들어주실 수 있나요? 감사해요.

답변1

예, 변수 값 또는 명령 대체 결과로/에서 리디렉션하는 경우 2단계에서 확장됩니다.

예( 이름이 파일 생성 file):

outfile='file'
date >"$outfile"

그러나 당신은 이것을 할 수 없습니다

redir='>'
date $redir file

이는 date피연산자 sum >으로 호출되기 때문입니다 file. 이는 1단계에서 명령줄을 구문 분석할 때 위에 "파서가 리디렉션을 위해 표시한 단어"가 없었기 때문입니다.

관련 정보