Bashでは、ネガティブファイルのグロービングを実行するための2つのオプションがあります。それらの間にどのような違いがありますか?どちらも同じ結果を返します。
$ ls
f1.txt f2.txt f3.txt f4.txt
$ ls f[!24]*
f1.txt f3.txt
$ ls f[^24]*
f1.txt f3.txt
ベストアンサー1
この[!...]
パターンは、...
角かっこで囲まれた文字セットに属さない単一の文字と一致します。これは、POSIX シェルで使用されるファイル名のグロービングパターンです。
この[^...]
パターンは同じように機能しますが、POSIX正規表現です。このパターンは通常、ファイル名globbingパターンで他のシェルに移植することはできませんが、シェルbash
はそれを認識して[!...]
パターンと同じように処理します。
ファイル名globbingパターンを作成するときにどちらかを選択できる場合は、移植可能なPOSIXバリアントを使用する必要があります[!...]
。
POSIX規格によるとファイル名のグロービングパターンに関する[...]
一般的な事実:
開いた角括弧がXBD RE角括弧式のように角括弧式を導入する場合は、文字
<exclamation-mark>
(!
)が正規表現の一致しないリスト内の文字()を置き換える必要があること<circumflex>
を除いて、パターン角括弧式を導入する必要があります。^
引用符のない文字で始まる角括弧式は、<circumflex>
未指定の結果を生成します。それ以外の場合は、[
文字自体が一致する必要があります。
「XBD REブラケット表現」は[...]
正規表現仕様。
[^...]
標準では、ファイル名のグロービングパターンの使用を「未指定」として残し、bash
シェル(および他の一部)はこれを[!...]
。