echo {A..z}의 특수 문자는 무엇을 나타냅니까?

echo {A..z}의 특수 문자는 무엇을 나타냅니까?

나는 이 명령을 사용하여 알파벳의 문자 시퀀스를 인쇄할 수 있다는 것을 알고 echo있으며 그렇게 하여 몇 가지 실험을 수행했습니다.

소문자 시퀀스

$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z

대문자의 연속

$ echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

대문자와 소문자의 시퀀스

$ echo {A..z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z

이제 이해가 안되는 부분이군요. special charcatersZ에서 a까지를 참조하세요 . 여기에는 더 나은 전망이 있습니다.

$ echo {a..Z}
a ` _ ^ ]  [ Z

나는 알고 싶다

  1. 이러한 특수 문자는 대문자와 소문자 사이에 어떻게 표시되나요?

  2. 이러한 특수 문자 시퀀스는 무엇을 의미합니까?

  3. 그리고 중간에 이 시퀀스만 인쇄하려면 어떻게 해야 합니까?

답변1

{A..z}현재 로케일의 문자 인코딩(대부분 ASCII 또는 이와 유사한 것)을 기반으로 확장됩니다. 실행하거나 man ascii(시스템에 이 항목이 있는 경우) 다음을 보면ASCII 테이블Z와 사이에 이러한 추가 문자가 표시됩니다 a(실제로 실행할 때 얻는 것과 동일 echo {Z..a}).

대문자/소문자만 얻으려면 다음을 사용하십시오.

echo {A..Z} {a..z}

중간에 있는 것을 얻으려면 다음을 사용할 수 있습니다.

typeset -a foo=($(echo {Z..a}))
echo ${foo[@]:1:((${#foo[@]} - 2))}

먼저 배열을 만듭니다.포함하다경계 밖의 두 문자, 그런 다음 모든 배열 요소에 액세스합니다.와는 별개로경계 문자.

추신: 작동하지 않는 이유를 알아내는 typeset -a foo=({Z..a})것은 독자의 연습 과제로 남겨집니다. :-)

관련 정보