在 glob 模式中指定全範圍的可列印 ASCII 字元
我想使用萬用字元模式僅匹配可列印(包括空格)的 ASCII 字元
0x20
到0x7e
. 這是在數據庫內部使用的。super
super.tab
我已經到達了模式:
[[ -~]]
這似乎有效,並且確實限制了非列印字元作為參數傳遞。
我是否看過任何內容,或者這是指定此字元範圍的正確方法?
編輯:
根據mikeserv的使用建議
[[: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
。
glob 模式或正則表達式
[ -~]
匹配 C 語言環境中的所有可列印字元:這匹配從 32(空格)到 126(波浪號)的所有字元。在 C 以外的語言環境中(更準確地說,如果LC_COLLATE
不是 C),如果應用程序是語言環境感知的,則它可能匹配其他字元。編寫此模式的另一種方法是
[[:print:]]
. 但是,這匹配目前語言環境中的所有可列印字元(基於LC_CTYPE
設置),因此它並不比[ -~]
您的案例更好。此外,如果您的應用程序或系統庫過於陳舊而無法理解[:class:]
語法,它可能無法正常工作。Super 的語法(如果設置了 global 選項)遵循相同的原則,所以它的意思是“僅可列印的 ASCII 字元”。Super 沒有設置除 之外的任何語言環境,因此您在這方面是安全的。確保已設置;預設值為,這要求您改為編寫。
[[*cHARS*]]``patterns=shell``[[ -~]]``LC_CTYPE``patterns=shell
patterns=regex``^[ -~]*$