![echo {A..z}의 특수 문자는 무엇을 나타냅니까?](https://linux55.com/image/126503/echo%20%7BA..z%7D%EC%9D%98%20%ED%8A%B9%EC%88%98%20%EB%AC%B8%EC%9E%90%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9D%84%20%EB%82%98%ED%83%80%EB%83%85%EB%8B%88%EA%B9%8C%3F.png)
나는 이 명령을 사용하여 알파벳의 문자 시퀀스를 인쇄할 수 있다는 것을 알고 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 charcaters
Z에서 a까지를 참조하세요 . 여기에는 더 나은 전망이 있습니다.
$ echo {a..Z}
a ` _ ^ ] [ Z
나는 알고 싶다
이러한 특수 문자는 대문자와 소문자 사이에 어떻게 표시되나요?
이러한 특수 문자 시퀀스는 무엇을 의미합니까?
그리고 중간에 이 시퀀스만 인쇄하려면 어떻게 해야 합니까?
답변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})
것은 독자의 연습 과제로 남겨집니다. :-)