Ketika saya menggunakan yang berikut ini, saya mendapatkan hasil seperti yang diharapkan:
$ echo {8..10}
8 9 10
Bagaimana saya bisa menggunakan ekspansi brace ini dengan cara yang mudah, untuk mendapatkan output berikut?
$ echo {8..10}
08 09 10
Saya sekarang bahwa ini dapat diperoleh menggunakan seq
(tidak mencoba), tetapi bukan itu yang saya cari.
Info yang berguna mungkin saya terbatas pada versi bash ini. (Jika Anda memiliki zsh
solusi, tetapi tidak ada bash
solusi, silakan berbagi juga)
$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)
bash
arithmetic
brace-expansion
Bernhard
sumber
sumber
Jawaban:
Awali angka pertama dengan a
0
untuk memaksa setiap istilah memiliki lebar yang sama.Dari bagian bash man page di Brace Expansion:
Juga catatan bahwa Anda dapat menggunakan
seq
dengan-w
pilihan untuk menyamakan lebar oleh bantalan dengan nol terkemuka:Jika Anda ingin lebih banyak kontrol, Anda bahkan dapat menentukan format gaya printf:
sumber
echo {08..10}
solusinya, itu hanya diperkenalkan untuk bash versi 4 dan lebih tinggi.perl
) nol di depan menunjukkan angka oktal. Saya kira tidak sering Anda menginginkan urutan angka oktal ...seq
dengan-w
saklar seperti:seq -w 003
menghasilkan angka 001, 002, dan 003.foo_00001.someextension
mana hampir semua konteks penyortiran menyediakan urutan yang waras.jika Anda menggunakan printf
ini akan memaksa menjadi 2 karakter dan akan menambah angka 0. Jika Anda membutuhkan 3 digit Anda dapat mengubah ke "% .3d".
sumber
printf
solusinya, tetapi tidak benar-benar membuat ini lebih mudah. Saya berharap ada beberapa trik tersembunyi yang berhasil :)Gunakan rentang yang dimulai dengan angka konstan dan hapus angka itu:
atau tanpa menggunakan perintah eksternal:
Untuk digunakan dalam for for:
meskipun untuk kasus ini loop sementara akan lebih jelas dan bekerja di shell POSIX:
sumber
for
loop.Saya memiliki versi bash yang sama dari poster asli (
GNU bash, version 3.2.51(1)-release
) dan{08..12}
tidak berfungsi untuk saya, tetapi yang berikut tidak:Ini sedikit lebih membosankan, tetapi ia bekerja pada versi OP bash (dan versi yang lebih baru, saya akan berasumsi).
sumber
Sebagai referensi, saya pikir lebar tetap otomatis hanya terjadi pada versi terbaru dari bash:
sumber
nol, ini dan sirip adalah vars, jadi itu mudah, kamu hanya menulis nol yang kamu katakan dalam 'nol' untuk ini sampai sirip tanpa masalah;)
sumber