0x20
인쇄 가능한(공백 포함) ASCII 문자 만 일치시키기 위해 와일드카드 패턴을 사용하고 싶습니다 0x7e
.super
super.tab
데이터 베이스.
나는 다음과 같은 패턴을 생각해 냈습니다.
[[ -~]]
이것은 작동하는 것으로 보이며 인쇄되지 않는 문자가 인수로 전달되는 것을 제한합니다.
제가 간과하고 있는 부분이 있나요? 아니면 이 문자 범위를 지정하는 올바른 방법인가요?
편집하다:
기반으로맥사이프추천합니다 [[:print:]]
. 시도해 보았지만 작동하지 않는 것 같습니다.
내 super.tab
항목은 다음과 같습니다.
dosuperthing /system/dosuperthing.pl $Users uid=0 arg1="[[:print:]]"
[[:print:]]
또는 와일드카드 패턴을 시도하면 [:print:]
첫 번째 인수로 전달하는 위치에 다음이 각각 기록됩니다.:print:
arg1
super
abcdef
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_COLLATE
C가 아닌 경우)에서는 애플리케이션이 로케일을 인식하는 경우 다른 문자와 일치할 수 있습니다.
이 패턴을 작성하는 또 다른 방법은 입니다 [[:print:]]
. 그러나 이는 현재 로케일(설정에 따라)에서 인쇄 가능한 모든 문자와 일치 하므로 사용 사례보다 나을 LC_CTYPE
것이 없습니다 . [ -~]
또한 응용 프로그램이나 시스템 라이브러리가 너무 오래되어 구문을 이해할 수 없는 경우 작동하지 않을 수 있습니다 [:class:]
.
Super의 구문(전역 옵션이 설정된 경우)은 동일한 원칙을 따르므로 "인쇄 가능한 ASCII 문자만"을 의미합니다. Super는 그 이외의 다른 로케일을 설정하지 않으므로 그런 점에서는 안전합니다. 확실하게 하다[[cHARS]]
patterns=shell
[[ -~]]
LC_CTYPE
patterns=shell
예put; 기본값은 이며 대신 작성 patterns=regex
해야 합니다 .^[ -~]*$