Saya mengerti apa itu brace expansion , tapi saya tidak tahu cara terbaik untuk menggunakannya.
Kapan Anda menggunakannya?
Tolong ajari saya beberapa contoh yang nyaman dan luar biasa jika Anda memiliki tip Anda sendiri.
Saya mengerti apa itu brace expansion , tapi saya tidak tahu cara terbaik untuk menggunakannya.
Kapan Anda menggunakannya?
Tolong ajari saya beberapa contoh yang nyaman dan luar biasa jika Anda memiliki tip Anda sendiri.
Perluasan brace sangat berguna jika Anda memiliki nama jalur yang panjang. Saya menggunakannya sebagai cara cepat untuk membuat cadangan file :
cp /a/really/long/path/to/some/file.txt{,.bak}
akan menyalin /a/really/long/path/to/some/file.txt
ke/a/really/long/path/to/some/file.txt.bak
Anda juga dapat menggunakannya secara berurutan . Saya pernah melakukannya untuk mengunduh banyak halaman dari web:
wget http://domain.com/book/page{1..5}.html
atau
for i in {1..100}
do
#do something 100 times
done
program -f file1 -f file2 -f file3
, Anda bisa melakukannyaprogram "-f file"{1..3}
program
mendapat tiga kata:"-f file1" "-f file2" "-f file3"
, bukan 6:"-f" "file1" "-f" "file2" "-f" "file3"
.for
lingkaran agak tidak ada gunanya, karena Anda dapat menulisfor ((i=1; i<=100; i++))
dan lebih efisien.Ekspansi Brace sangat berguna saat membuat struktur direktori besar:
Ini akan memberimu
Anda bahkan bisa melangkah lebih jauh dan memasukkan ekspansi brace ke ekspansi brace:
Ini akan memberi Anda struktur direktori yang sama dengan contoh di atas.
sumber
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) sebenarnya tidak melayani tujuan apa pun. Anda bisa saja melakukan ini:mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
.subdir1
dansubdir2
dalam arti non-literal. Gantisubdir1
dengancat
dansubdir2
dengandog
misalnya.Saya menggunakannya ketika saya ingin mengurangi mengetik:
Contoh lain:
sumber
Saya menggunakannya untuk membandingkan hasil tes aktual dengan hasil tes yang diinginkan selama pengembangan. Jika tes # 41 gagal, mudah untuk melihat apa perbedaan antara output tes (dalam file tests.output / 041) dan output yang diinginkan (dalam file tests.out / 041):
sumber
Beberapa kasus yang sering saya alami adalah:
Untuk mengganti nama:
atau
atau
(Meskipun kurang berantakan untuk menggunakan kontrol versi untuk 2 tugas terakhir.)
Untuk membandingkan (sudah disebutkan):
sumber
Ada beberapa jawaban yang bagus di sini, tetapi tidak ada yang menyebutkan kapan tidak menggunakan ekspansi brace. Seperti penjawab lainnya, saya menggunakan sedikit penjepit pada baris perintah. Saya juga menggunakannya di alias dan fungsi saya karena saya dapat mengharapkan shell cerdas.
Saya tidak menggunakannya dalam skrip shell saya (kecuali ada beberapa alasan mengapa skrip harus bash atau zsh, meskipun dalam kasus tersebut, yang terbaik adalah meng-upgrade ke bahasa skrip "nyata" seperti
perl
ataupython
). Ekspansi Brace tidak portabel karena tidak dalam standar shell POSIX. Bahkan jika bekerja di Anda/bin/sh
- shebang skrip ed shell, itu tidak akan bekerja pada sistem dengan lebih dilucuti/bin/sh
kerang (misalnyadash
).Dalam hal perbedaan satu digit, Anda tidak perlu ekspansi penjepit; kelas karakter sudah cukup:
Bashism:
Portabel:
sumber
file{1,2}
akan selalu diperluas kefile1 file2
, sementarafile[12]
hanya memperluas ke nama file yang ada: yaitu jikafile1
ada tetapifile2
tidak,file[12]
diperluas menjadifile1
hanya. The[]
ekspansi benar-benar versi terbatas dari?
ekspansi (dan mereka disebut "ekspansi pathname").