回答:
長いパス名がある場合、ブレース展開は非常に便利です。ファイルをバックアップする簡単な方法として使用します:
cp /a/really/long/path/to/some/file.txt{,.bak}
にコピー/a/really/long/path/to/some/file.txtします/a/really/long/path/to/some/file.txt.bak
シーケンスで使用することもできます。私はかつてウェブから多くのページをダウンロードするためにそうしました:
wget http://domain.com/book/page{1..5}.html
または
for i in {1..100}
do
#do something 100 times
done
program3つの単語を取得するため、失敗します:"-f file1" "-f file2" "-f file3"6:ではなく、"-f" "file1" "-f" "file2" "-f" "file3"。
forループで使用するために展開を使用することは、あなたが書くことができ、for ((i=1; i<=100; i++))より効率的であるため、少し無意味です。
大規模なディレクトリ構造を作成する場合、ブレースの拡張は非常に便利です。
mkdir -p dir1/{subdir1,subdir2}/{subsubdir1,subsubdir2}
これはあなたに与えます
find dir1 -type d
dir1
dir1/subdir1
dir1/subdir1/subsubdir1
dir1/subdir1/subsubdir2
dir1/subdir2
dir1/subdir2/subsubdir1
dir1/subdir2/subsubdir2
さらに一歩進んで、ブレース展開をブレース展開に入れることもできます。
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
これにより、上記の例と同じディレクトリ構造が得られます。
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}})は実際には何の目的にも役立ちません。これを実行できたはずですmkdir -p dir1/subdir{1,2}/subsubdir{1,2}。
subdir1と 、目的に役立ちますsubdir2。元に戻しsubdir1てcatとsubdir2してdog例えば。
開発中に実際のテスト出力を目的のテスト出力と比較するために使用します。テスト#41が失敗した場合、テスト出力(ファイルtests.output / 041)と目的の出力(ファイルtests.out / 041)の違いを簡単に確認できます。
$ diff tests.{out,output}/041
よくあるケースは次のとおりです。
名前を変更する場合:
mv myText.{txt,tex}
または
mv myText.tex{,.old}
または
cp myText.tex{,.backup}
(最後の2つのタスクにバージョン管理を使用する方が面倒ではありませんが。)
比較するために(すでに述べた):
diff path{1,2}/a.txt
ここにはいくつかの優れた答えがありますが、ブレース拡張を使用しない場合について言及しているものはありません。他の回答者と同じように、コマンドラインでブレース展開をかなり使用します。スマートシェルが期待できるため、エイリアスと関数でも使用します。
シェルスクリプトでは使用しません(スクリプトがbashまたはzshである他の理由がない限り、これらの場合、perlまたはのような「実際の」スクリプト言語にアップグレードするのが最善pythonです)。 ブレース展開は POSIXシェル標準にないため、移植性がありません。それはあなたで動作する場合であっても/bin/sh- シェバング編シェルスクリプト、それはより多くの剥奪を持つシステムでは動作しません/bin/shシェル(例えばdash)。
1桁の違いの場合、中括弧の拡張は必要ありません。文字クラスで十分です:
バシズム:
diff file{1,2}
ポータブル:
diff file[12]
file{1,2}常にに展開するのに対しfile1 file2、file[12]既存のファイル名にのみ展開することです。つまり、file1存在する場合は存在file2しないが、のみにfile[12]展開しfile1ます。[]拡大は本当にの制限されたバージョンで?拡大(と、彼らは「パス名展開」と呼ばれています)。
program -f file1 -f file2 -f file3、あなたはすることができますprogram "-f file"{1..3}