Bash: 이 중괄호 표현식은 왜 이렇게 작동하나요?

Bash: 이 중괄호 표현식은 왜 이렇게 작동하나요?

이것은 bash 4 관련 문제입니다. 나는 bash 중괄호 표현에 어느 정도 익숙하며 다음을 읽었습니다.수동그러나 실제로 어떻게 작동하는지 이해하지 못합니다.

내 생각엔 이게 뭔가 관련이 있는 것 같아ASCII 테이블그러나 나는 그것을 확인하기 위해 bash 소스 코드를 검색하는 습관이 없으므로 내 질문은 다음과 같습니다.

이것이 왜 echo {G..a}확장 됩니까?

G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ ` a

답변1

bash매뉴얼 에서 (강조):

시퀀스 표현식은 합계가 정수 또는 단일 문자이고 선택적으로 증분은 정수인 형식 {x..y[..incr]}xy합니다 incr. 정수가 제공되면 표현식은 그 x사이의 모든 숫자 로 확장됩니다 y. 제공된 정수 앞에 접두어를 붙여 0각 항목의 너비를 동일하게 만들 수 있습니다. x또는 0으로 시작 하면 y쉘은 생성된 모든 용어에 필요한 경우 0 패딩을 사용하여 동일한 자릿수를 포함하도록 시도합니다. x문자가 제공되면 표현식은 기본 C 로케일을 사용하여 및 사이의 모든 문자(포함) 로 사전식으로 확장됩니다 .y 두 가지 모두 x동일한 y유형이어야 합니다. 델타가 제공되면 각 항목 간의 차이로 사용됩니다. 기본 증분은 적절하게 1 또는 -1입니다.

문자 범위를 사용한 중괄호 확장은 와 사이의 문자를 허용합니다 bash. 따라서 표시되는 것은 ASCII 테이블 G안과 사이의 문자 입니다 a(값이 테이블의 순서대로 표시되므로 기본 증분은 1입니다).

표준 ASCII 테이블의 마지막 대문자( Z)와 첫 번째 소문자( a) 사이에는 다음 문자가 있습니다.

[ \ ] ^ _ `

이 순서대로.

\쉘은 이스케이프된 공백 문자를 리터럴 공백으로 처리하므로 출력되지 않습니다 . 또한 따옴표가 없는 역따옴표가 출력되므로 아래와 같이 예기치 않은 코드 실행이 발생할 수 있습니다.스테판이 지적했다2015년 메일링 리스트에 보낸 메시지에서 bug-bash.

그러나 설명서에서 "입력"이 무엇을 의미하는지 잘 모르겠지만 {1..z}(확장되지 않음)과 같은 문자와 숫자는 사용할 수 없는 것 같습니다.

관련 정보