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
あります。^[ -~]*$