bashでは、[[:space:]]はどういう意味ですか?

bashでは、[[:space:]]はどういう意味ですか?

ちょうどbashスクリプトが見つかりました。[[:space:]]Bashスクリプトでは、これはどういう意味ですか?なぜ二重コロンですか?

答え1

実際にはbashマニュアルにありますが、探しているものが何であるかを知るのが役立ちます。いいえこれは、自分が見ている内容がわからないときに便利です。検索してみると条件式の部分があるので混乱します[[[[ expression ]]また、検索すると、:space:同じセクションの下に2つの例が表示されます。この例では、ナビゲーションパスのナビゲーションに従うことができます。

たとえば、次は1行(シェル変数行に格納されている)と一致し、値に空白文字(0を含む)、0個、または1つのインスタンスで構成される文字シーケンスがある場合は「b」と一致します。 ㅏ':

[[ $line =~ [[:space:]]*?(a)b ]]

...その部分が「空白文字」に該当するという点で一緒に編むことができますが[[:space:]]、そう考えることもできます。ただ表す完全な文字クラスではなく、リテラル空白文字です。

" space"もし(もし?)オンラインバッシュマニュアル、プレイできるゲームは「ただ」約32個です。約10番目はここにあります:

"[" および "]" では、文字クラスは [:class:] 構文を使用して指定できます。ここで、classはPOSIX標準で定義されている次のクラスの1つです。

alnum   alpha   ascii   blank   cntrl   digit   graph   lower
print   punct   space   upper   word    xdigit

文字クラスは、そのクラスに属するすべての文字と一致します。

その後、次の位置に移動します。POSIX規格そこから「文字クラス」という用語を検索して見つけることができます。

wctype, wctype_l - 文字クラス定義、これにより、次のことができます。

wctype() [CX] [オプションの開始] および wctype_l() [オプションの終了] 関数は、現在のロケール [CX] [オプションの開始] の文字タイプ情報で定義されているエンコーディング文字セット規則に従って wctype_t の値を決定する必要があります。または、それぞれのロケールで、[Option End]はロケール(LC_CTYPEカテゴリ)を表します。

それに従うとロケール設定リンクをクリックすると、最終的に実際の答えを得ることができます。ロケールセクション:

スペース

空白文字に分類する文字を定義します。 POSIXロケールでは、<space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>これを正確に含める必要があります。

upper、lower、alpha、digit、graph、またはxdigitキーワードで指定された文字は、ロケール定義ファイルに指定しないでください。 Portable Character Set<space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>およびクラススペースに含まれるすべての文字は自動的にこのクラスに含まれます。

答え2

これはBashだけのためではなく、POSIX表記の一部です。

POSIXとは何ですか?

POSIXまたは「UniX用ポータブルオペレーティングシステムインタフェース」は、(UNIX)オペレーティングシステムがサポートする必要があるいくつかの機能を定義する標準の集まりです。これらの規格の1つは、正規表現の2種類を定義します。

POSIX 角かっこ式

POSIX 角かっこ式は特殊文字クラスです。 POSIX 角かっこ式は、通常の文字クラスと同様に、文字セット内の文字と一致します。

標準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

詳細はこちらからご覧いただけます。ウィキペディア

答え3

正規表現およびファイル名 glob/shell パターンでは、この[...]構文は角かっこ内にリストされている文字のいずれかと一致します。この括弧内には、いくつかの名前付き標準文字があります。キャラクタークラス使用できます。 1つの場合は[:space:]空白文字と一致します(\sPerl正規表現と同様)。たとえば、参照してください。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 ]]正規表現を使用します。)

正規表現はシェルに限定されず、例で使用され、例awksed説明されています。Linuxのマニュアルページregex(7)

関連情報