web-dev-qa-db-ja.com

ブレース展開はいつ使用しますか?

ブレース展開 が何であるかは理解していますが、それをどのように使用するのが最善かわかりません。

いつ使用しますか?
ヒントがあれば、便利で注目すべき例をいくつか教えてください。

50
Benjamin

中括弧の展開は、パス名が長い場合に非常に役立ちます。私はそれをファイルをバックアップする簡単な方法として使用します

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
53
dogbane

大括弧の展開は、大きなディレクトリ構造を作成するときに非常に便利です。

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}}

これにより、上記の例と同じディレクトリ構造が得られます。

34
Christian

タイピングを減らしたいときに使用します。

geany /path/to/file1 /path/to/file2
# versus
geany /path/to/file{1,2}

もう一つの例:

wajig install libpam0g-dev libiw-dev libdb-dev
# versus
wajig install lib{pam0g,iw,db}-dev
22
tshepang

開発中の実際のテスト出力と目的のテスト出力を比較するために使用します。テスト#41が失敗した場合、テスト出力(tests.output/041ファイル内)と目的の出力(tests.out/041ファイル内)の違いを簡単に確認できます。

$ diff tests.{out,output}/041
12
Bruce Ediger

私にとってよくあるケースは次のとおりです。

名前を変更する場合:

mv myText.{txt,tex}

または

mv myText.tex{,.old}

または

cp myText.tex{,.backup}

(ただし、最後の2つのタスクにバージョン管理を使用する方が煩雑ではありません)。

比較のために(すでに述べた):

diff path{1,2}/a.txt

ここにはいくつかの素晴らしい答えがありますが、ブレース展開を使用するnotについては言及されていません。他の回答者と同様に、コマンドラインで中かっこ展開をかなり使用しています。スマートシェルが期待できるため、エイリアスや関数でも使用しています。

私はシェルスクリプトで使用していません(スクリプトがbashまたはzshである必要がある他の理由がない限り、「実際の」スクリプトにアップグレードするのが最善ですが) Perlpythonなどの言語)。 中括弧の展開は 移植不可です。これは、POSIXシェル標準にはないためです。 /bin/sh- Shebang edシェルスクリプト、それ以上ストリップされたシステムでは機能しません/bin/shシェル(例:dash)。

1桁の違いがある場合は、ブレースを展開する必要はありません。文字クラスで十分です:

バシズム:

diff file{1,2}

ポータブル:

diff file[12]
4
Adam Katz

非常に大きなファイルを分割した後

split -b 100m hugeFile.Zip part.

それが262個に分割されたとしましょう、言い換えればpart.aapart.abpart.ac ... part.kb

次のように中かっこ展開をネストすることで、これらのピースを再び結合できます

cat part.{{a..j}{a..z},k{a..b}} > hugeFile.Zip
0
Madacol