Bash

在 glob 模式中指定全範圍的可列印 ASCII 字元

  • April 7, 2014

我想使用萬用字元模式僅匹配可列印(包括空格)的 ASCII 字元0x200x7e. 這是在數據庫內部使用的。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``^[ -~]*$

引用自:https://unix.stackexchange.com/questions/123469