a[bc]d
これらとそしての違いは何ですかa{b,c}d
?a{b,c}d
すでに存在しているのに、なぜ人々はまだそれを使用するのですかa[bc]d
?
ベストアンサー1
二人は全く違います。
a[bc]d
はファイル名パターン(を除くシェルからfish
)。 2つに拡張されますファイル名 abd
acd
これが現在のディレクトリにある既存のファイルの名前の場合。
この
[...]
部分は、リストされている文字のうちの1文字と一致する(または範囲が含まれているときに要素を照合する)角括弧式です。パターンを一致させるには、a[bc]d
文字列の間a
とファイル名の間の文字が必要d
です。b
c
abd
存在するが存在しない場合acd
にのみ拡張され、abd
その逆も同様です。abd
、も存在しない場合、acd
シェルとオプションによってエラー(元のUnix 、、、、、sh
)が発生し、シェルを終了できます。モードを拡張せずに(Bourneや同様のシェルに似ている)、何も拡張しないことがあります。 (、いくつかの以前のバージョン、元のUnix 、および同じコマンドに異なる一致するglobがある場合)。(t)csh
zsh
fish
bash -O failglob
rc
bash/zsh/yash -o nullglob
fish
sh
(t)csh
a{b,c}d
は支柱の拡張(これをサポートするシェルから)。 2つに拡張されますひも abd
そしてacd
。
部分
{...}
はカンマで区切られた文字列のセットです(この場合、一部のシェルでは、またはなどの範囲、またはなどのa..k
高20..25
レベルの範囲である可能性があります)。そしてEachはサイドキャラクタと組み合わせて、次のことを行います。拡張文字列 sum を計算します。これらの文字列は単一文字より長いか、中括弧で拡張できます。00..20..2
0..20..2%02d
a
d
これらの文字列が既存のファイル名と一致するかどうかに関係なく、拡張が発生します。
文字列を生成するには、中かっこ拡張を使用します。ファイル名を一致させるには、ファイル名パターンを使用します。
この特別なケースでは、1はa[bc]d
既存のファイルの名前である可能性があるため、rm -f ./*.[ch]
これらのシェルでこのような名前を使用することは潜在的に危険でrm -f ./*.{c,h}
問題が少なくなります。