Saya belajar shell scripting dari buku teks yang sudah ketinggalan zaman, dan bagi saya sepertinya akan sangat berguna untuk memiliki program yang hanya mengembalikan serangkaian angka yang dibatasi oleh spasi seperti
$ range 10 20
10 11 12 13 14 15 16 17 18 19 20
Kemudian, jika Anda melakukan skrip shell Anda dapat memiliki
for i in `range 10 20`; do some stuff with numbers in that range;done
apakah hal semacam itu ada, atau apakah saya perlu menulisnya sendiri?
range
denganseq
dalam contoh Anda. pemisah default adalah baris baru, memiliki spasi:seq -s " " 10 20
for
loop — atau bahkan perintah umum apa pun yang memecah argumen — kecuali Anda telah mengatur IFS secara berbeda.seq
karena tidak ditentukan oleh POSIX.Jawaban:
seq
adalah bagian dari coreutils.Keluaran:
Jika Anda hanya memberikan 2 argumen
seq
, kenaikannya adalah 1:sumber
sed
juga memiliki opsi bagus-s
untuk mengatur pemisah atau-w
untuk memenuhi syarat lebarnya. Dan Anda dapat memberikan peningkatan:seq -w -s ", " 0 5 20
hasil dalam 00, 05, 10, 15, 20 .seq
?seq 10 20
mungkin juga menjadi contoh sederhana yang layak ditambahkan;)Apakah Bash sudah cukup?
Anda dapat melakukan banyak hal dengan ekspansi brace . Bash 4 juga mendukung rentang empuk, mis
{01..20}
.Perhatikan bahwa Bash tidak dianggap portabel, dan bukan utilitas Unix standar. Meskipun Anda dapat dengan aman berasumsi bahwa itu diinstal pada sebagian besar Linux modern, jangan gunakan ini dalam skrip yang Anda rencanakan untuk dijalankan pada semua jenis mesin seperti Unix.
sumber
seq
. Pemakaian ini seperti dalam contoh Anda:seq -s " " 10 20
. The-s
parameter ini diperlukan, karena secara default nilai-nilai dipisahkan oleh\n
.seq
adalah utilitas GNU, dan karena itu bukan "program unix standar"for i in {001..010}; ... ; done
dan itu akan nol pad angka menjadi 3 digit.Jika Anda menginginkan sesuatu yang sepenuhnya portabel (yaitu yang tidak bergantung pada ekstensi bash tertentu atau perintah yang tidak ditentukan oleh POSIX)
sumber
/dev/null
atau< /dev/null
itu?If the awk program contains no actions and no patterns, but is otherwise a valid awk program, standard input and any file operands shall not be read and awk shall exit with a return status of zero.
Sebelum 10.7 tidak ada
seq
pada Mac OS X, tetapijot
, karena warisan BSD.Contoh:
sumber
Gunakan satu
for
lingkaransumber
Anda dapat menggunakan
seq
, atau jika Anda tidak memiliki itu, Anda dapat menulis sendiri:Pemakaian:
Atau:
sumber
Demi kelengkapan di sini sesuatu yang akan bekerja dengan beberapa varian Unix yang lebih lama (selama mereka telah menginstal perl). Tidak terlalu elegan.
sumber