glob 패턴으로 인쇄 가능한 ASCII 문자의 전체 범위를 지정합니다.

glob 패턴으로 인쇄 가능한 ASCII 문자의 전체 범위를 지정합니다.

0x20인쇄 가능한(공백 포함) ASCII 문자 만 일치시키기 위해 와일드카드 패턴을 사용하고 싶습니다 0x7e.super super.tab데이터 베이스.

나는 다음과 같은 패턴을 생각해 냈습니다.

[[ -~]]

이것은 작동하는 것으로 보이며 인쇄되지 않는 문자가 인수로 전달되는 것을 제한합니다.

제가 간과하고 있는 부분이 있나요? 아니면 이 문자 범위를 지정하는 올바른 방법인가요?

편집하다:

기반으로맥사이프추천합니다 [[:print:]]. 시도해 보았지만 작동하지 않는 것 같습니다.

super.tab항목은 다음과 같습니다.

dosuperthing  /system/dosuperthing.pl $Users  uid=0 arg1="[[:print:]]"

[[:print:]]또는 와일드카드 패턴을 시도하면 [:print:]첫 번째 인수로 전달하는 위치에 다음이 각각 기록됩니다.:print:arg1superabcdef

super: (admin) Your argument #1 <abcdef> must match pattern <[[:print:]]>

super: (admin) Your argument #1 <abcdef> must match pattern <[:print:]>

super: (admin) Your argument #1 <abcdef> must match pattern <:print:>

arg1-99이것은 오래된 레거시 프로덕션 코드이므로 내부적으로 허용되는 스키마를 조정하는 것 외에는 수정할 수 없습니다 super.tab.

답변1

glob 패턴 또는 정규 표현식은 [ -~]C 로케일의 인쇄 가능한 모든 문자와 일치합니다. 이는 32(공백)에서 126(물결표)까지의 모든 문자와 일치합니다. C 이외의 로케일(보다 정확하게는 LC_COLLATEC가 아닌 경우)에서는 애플리케이션이 로케일을 인식하는 경우 다른 문자와 일치할 수 있습니다.

이 패턴을 작성하는 또 다른 방법은 입니다 [[:print:]]. 그러나 이는 현재 로케일(설정에 따라)에서 인쇄 가능한 모든 문자와 일치 하므로 사용 사례보다 나을 LC_CTYPE것이 없습니다 . [ -~]또한 응용 프로그램이나 시스템 라이브러리가 너무 오래되어 구문을 이해할 수 없는 경우 작동하지 않을 수 있습니다 [:class:].

Super의 구문(전역 옵션이 설정된 경우)은 동일한 원칙을 따르므로 "인쇄 가능한 ASCII 문자만"을 의미합니다. Super는 그 이외의 다른 로케일을 설정하지 않으므로 그런 점에서는 안전합니다. 확실하게 하다[[cHARS]]patterns=shell[[ -~]]LC_CTYPEpatterns=shell put; 기본값은 이며 대신 작성 patterns=regex해야 합니다 .^[ -~]*$

관련 정보