私はbashスクリプトに出くわしました。 bashスクリプトで[[:space:]]
はどういう意味ですか?なぜ二重コロンなのか?
これは確かにbashのマニュアルにありますが、探しているものを知るのに役立ちます。探しているものがわからない場合は、役に立たないで。 [[
を検索すると、[[ expression ]]
条件式セクションに気を取られてしまいます。さらに、:space:
を検索すると、同じセクションに2つの例が表示されます。その例では、パンくずリストに従うことができます。
たとえば、ゼロを含む任意の数、スペース文字、0または1つの「a」のインスタンスで構成される値に文字のシーケンスがある場合、次の行は(シェル変数lineに格納されている)行と一致します。 「b」:
[[ $line =~ [[:space:]]*?(a)b ]]
... [[:space:]]
部分が「スペース文字」に対応していることをつなぎ合わせることができますが、それがonlyリテラルスペースであると考えることは許されますキャラクターであり、キャラクターのクラス全体ではありません。
(オンラインbashマニュアル で文字列" space"
(つまり、スペースの後にWordの「スペース」が続く)を検索した場合、32の「のみ」があります。通過するマッチ。 10番目のものがここにあります:
‘[’と ‘]’内では、構文[:class:]を使用して文字クラスを指定できます。ここで、classはPOSIX標準で定義されている次のクラスのいずれかです。
alnum alpha ascii blank cntrl digit graph lower print punct space upper Word xdigit
文字クラスは、そのクラスに属するすべての文字と一致します。
これで POSIX標準 に移動し、「文字クラス」という用語を検索して見つけることができます。
wctype、wctype_l-文字クラスを定義する 、これは次のようにあなたを取得します:
Wctype()[CX] [オプション開始]およびwctype_l()[オプション終了]関数は、現在のロケールの文字タイプ情報によって定義されたコード化文字セットの規則に従って、wctype_tの値を決定します[CX] [オプション開始]または、locale、[Option End]でそれぞれ表されるロケール(カテゴリLC_CTYPE)。
次に setlocale リンクをたどると、最終的に Localeセクション で実際の答えが得られます。
スペース
空白文字として分類される文字を定義します。 POSIXロケールでは、正確に
<space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>
が含まれます。ロケール定義ファイルでは、upper、lower、alpha、digit、graph、xdigitの各キーワードに文字を指定しないでください。ポータブル文字セットの
<space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>
、およびクラスの空白に含まれているすべての文字は、このクラスに自動的に含まれます。
これはBashだけでなく、POSIX表記の一部です。
POSIXとは何ですか?
POSIXまたは「Unix用のポータブルオペレーティングシステムインターフェイス」は、(UNIX)オペレーティングシステムがサポートする必要がある機能の一部を定義する標準の集まりです。これらの標準の1つは、2つの種類の正規表現を定義しています。
POSIXブラケット式
POSIXブラケット式は特殊な種類の文字クラスです。 POSIXブラケット式は、通常の文字クラスと同様に、一連の文字のうち1文字と一致します。
標準POSIX
[[:alnum:]] Alphanumeric characters
[[:alpha:]] Alphabetic characters
[[:blank:]] Space and tab
[[:cntrl:]] Control characters
[[:digit:]] Digits
[[:graph:]] Visible characters (anything except spaces and control characters)
[[:lower:]] Lowercase letters
[[:print:]] Visible characters and spaces (anything except control characters)
[[:punct:]] Punctuation (and symbols).
[[:space:]] All whitespace characters, including line breaks
[[:upper:]] Uppercase letters
[[:xdigit:]] Hexadecimal digits
なし標準
[[:ascii:]] ASCII characters
[[:Word:]] Word characters (letters, numbers and underscores)
レガシー構文(誰かがこれらへの参照を見つけることができますか?)
[[:<:]] Start of Word
[[:>:]] End of Word
あなたはここでより多くの情報を見つけることができます: wiki
正規表現およびファイル名グロブ/シェルパターンでは、_[...]
_構成は、角かっこ内にリストされている文字のいずれか1文字と一致します。これらの括弧内では、いくつかの名前付き標準文字文字クラスを使用できます。それらの1つは_[:space:]
_で、これは空白文字に一致します(Perl正規表現の_\s
_など)。たとえば、 Bashのマニュアルのパターンマッチング
したがって、_[[:space:]]
_は、正規表現またはパターン一致の一部であり、空白のみに一致します。
例えば。パターンマッチ(Bash固有ではなく標準シェル):
_case $var in
*[[:space:]]*) echo "'$var' contains whitespace";;
esac
_
または正規表現(Bash):
_if [[ $var =~ [[:space:]] ]]; then
echo "'$var' contains whitespace"
fi
_
ブラケット式_[...]
_は正規表現とシェルパターンで同じように機能しますが、一般的には非常に同じではないことに注意してください。 (case
および_[[ string == pattern ]]
_はパターン一致を使用し、_[[ string =~ regex ]]
_は正規表現を使用します。)
正規表現もシェル固有ではなく、たとえば、 awk
とsed
も同様で、たとえば、 Linuxマニュアルページregex(7)