glob パターンで印刷可能な ASCII 文字の全範囲を指定します。

glob パターンで印刷可能な ASCII 文字の全範囲を指定します。

0x20印刷可能な(スペースを含む)ASCII文字のみを一致させるためにワイルドカードパターンを使用したいと思います0x7esuper 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あります。^[ -~]*$

関連情報