`a[bc]d`(括弧)と `a{b,c}d`(中括弧)の違いは何ですか?

`a[bc]d`(括弧)と `a{b,c}d`(中括弧)の違いは何ですか?

a[bc]dこれらとそしての違いは何ですかa{b,c}da{b,c}dすでに存在しているのに、なぜ人々はまだそれを使用するのですかa[bc]d

ベストアンサー1

二人は全く違います。

a[bc]dファイル名パターン(を除くシェルからfish)。 2つに拡張されますファイル名 abdacdこれが現在のディレクトリにある既存のファイルの名前の場合。

  • この[...]部分は、リストされている文字のうちの1文字と一致する(または範囲が含まれているときに要素を照合する)角括弧式です。パターンを一致させるには、a[bc]d文字列の間aとファイル名の間の文字が必要dです。bc

  • abd存在するが存在しない場合acdにのみ拡張され、abdその逆も同様です。

  • abd、も存在しない場合、acdシェルとオプションによってエラー(元のUnix 、、、、、sh)が発生し、シェルを終了できます。モードを拡張せずに(Bourneや同様のシェルに似ている)、何も拡張しないことがあります。 (、いくつかの以前のバージョン、元のUnix 、および同じコマンドに異なる一致するglobがある場合)。(t)cshzshfishbash -O failglobrcbash/zsh/yash -o nullglobfishsh(t)csh

a{b,c}d支柱の拡張(これをサポートするシェルから)。 2つに拡張されますひも abdそしてacd

  • 部分{...}はカンマで区切られた文字列のセットです(この場合、一部のシェルでは、またはなどの範囲、またはなどのa..k20..25レベルの範囲である可能性があります)。そしてEachはサイドキャラクタと組み合わせて、次のことを行います。拡張文字列 sum を計算します。これらの文字列は単一文字より長いか、中括弧で拡張できます。00..20..20..20..2%02dad

  • これらの文字列が既存のファイル名と一致するかどうかに関係なく、拡張が発生します。

文字列を生成するには、中かっこ拡張を使用します。ファイル名を一致させるには、ファイル名パターンを使用します。


この特別なケースでは、1はa[bc]d既存のファイルの名前である可能性があるため、rm -f ./*.[ch]これらのシェルでこのような名前を使用することは潜在的に危険でrm -f ./*.{c,h}問題が少なくなります。

おすすめ記事