Saya akan menebak bahwa downvote itu karena jawaban Anda bersifat umum untuk 'sh', dan tidak khusus untuk 'bash'. Pendekatan Bash murni {begin end step} berkinerja sedikit lebih baik. Metode 'seq' yang lebih lama berguna pada sistem memori yang lebih lama atau lebih kecil seperti busybox. Saya melakukan upvote jawaban Anda dan TheBonsai. :)
Scott Prive
6
Lebih suka $ (...) untuk mengutip kembali. Backquotes tidak bersarang dengan sehat.
Mahakuasa
seq 1000000 1000010 hanya mengapung, sebenarnya - tidak ada cara untuk membuatnya bilangan bulat! Ekspansi brace bekerja.
hmijail meratapi orang-orang yang mengundurkan diri
112
Ekspansi brace Bash 4 memiliki fitur langkah:
for{0..10..2};do..done
Tidak masalah jika Bash 2/3 (C-style untuk loop, lihat jawaban di atas) atau Bash 4, saya lebih suka apapun daripada perintah 'seq'.
dan btw, tahukah Anda jika bash4 default pada OS utama apa pun?
SilentGhost
3
Bash4 masih bukan arus utama, tidak. Kenapa tidak seq? Baiklah, katakan saja dengan kata-kata bot di saluran IRC #bash: "seq (1) adalah perintah eksternal yang sangat tidak standar yang digunakan untuk menghitung sampai 10 dalam howtos Linux yang konyol."
TheBonsai
Pemahaman saya adalah bahwa seq adalah bagian dari coreutils. apa yang tidak standar tentang itu? argumen? terima kasih atas bantuan Anda.
SilentGhost
4
Argumen-argumen ini mungkin atau mungkin tidak diperhitungkan untuk Anda: * ada cukup sistem tanpa GNU coreutils (tetapi Bash terpasang) * Anda membuat proses eksternal yang tidak diperlukan * Anda mengandalkan gagasan bahwa semua 'seq' melakukan apa yang 'seq' Anda lakukan * itu tidak distandarisasi oleh ISO
TheBonsai
3
@becko Jika langkah disimpan dalam variabel i, maka Anda tidak dapat melakukannya for {0..10..${i}}.. gagal.
+1 Karena langkahnya dapat diganti oleh variabel juga.
Nehal J Wani
1
Saya pikir inilah yang sebenarnya diinginkan oleh kebanyakan orang - cara sederhana untuk melakukan perulangan dengan nilai langkah yang ditentukan. Kedengarannya lebih sederhana daripada semua jawaban berbasis seq, dan merupakan sintaks yang lebih jelas daripada ekspansi brash Bash4, dan sepertinya itu akan memungkinkan untuk variabel (saya belum mencobanya, tapi sintaks pasti menyarankan itu).
tobylaroni
Berfungsi di Bash 3, tidak seperti jawaban @ TheBonsai.
srcerer
Ia bahkan menyelesaikan variabel, ((i = "$ first"; i <= "$ last"; i + = "$ step")). Tidak begitu mudah dengan kurung kurawal dan seq.
Blaa_Thor
20
#!/bin/bashfor i in $(seq 1210)do
echo "skip by 2 value $i"done
seq adalah perintah Linux. Ini tidak akan tersedia di Mac OS X atau FreeBSD.
Dereckson
5
FWIW seq tersedia di standar OS X Mavericks 10.9.1
Mark Setchell
Saya sudah mencoba beberapa sintax lain, tetapi itu adalah satu-satunya yang berfungsi untuk saya pada CentOS kecil. @z - telah menyelamatkan hari saya: D
Jawaban:
saya akan melakukan
(meskipun tentu saja
seq 0 2 10
akan menghasilkan output yang sama sendiri).Catatan yang
seq
memungkinkan angka floating-point (misalnya,seq .5 .25 3.5
) tetapi ekspansi brace bash hanya memungkinkan bilangan bulat.sumber
Ekspansi brace Bash 4 memiliki fitur langkah:
Tidak masalah jika Bash 2/3 (C-style untuk loop, lihat jawaban di atas) atau Bash 4, saya lebih suka apapun daripada perintah 'seq'.
sumber
i
, maka Anda tidak dapat melakukannyafor {0..10..${i}}
.. gagal.Bash Murni, tanpa proses tambahan:
sumber
sumber
sumber