Apakah ada perintah built-in Linux yang memungkinkan untuk mengeluarkan string yang n kali input string ??
linux
command-line
bash
shell
text-manipulation
Mendapatkan gratis
sumber
sumber
Jawaban:
sumber
printf
adalah bahwa hal itu berulang kali akan berlaku argumen kelebihan untuk format string, "looping" gratis. Dengan "kelebihan", maksud saya ada lebih banyak argumen daripada%
placeholder.Berikut cara kuno yang cukup portabel:
Ini adalah versi yang lebih konvensional dari jawaban Adrian Petrescu menggunakan brace expansion:
Itu setara dengan:
Ini adalah versi jawaban pike yang lebih ringkas dan dinamis :
sumber
sed -n 'H;${x;s/\n//gp}'
atau yangsed -n ':t;${s/\n//gp};N;bt'
lain adalah dengan melakukanecho $(yes "HelloWorld" | head -n 10)
yang menambah ruang antara setiap salinan string. Namun cara lain adalah menyalurkan melaluitr -d '\n'
yang juga menghilangkan baris baru akhir.yes
solusi adalah apa yang saya butuhkan, karena aku ingin menduplikasi perintah (yang output berfluktuasi). Jadi:yes "$(my-command)" | head -n 2
Ini dapat parameter dan tidak memerlukan variabel temp, FWIW:
Atau, jika
$N
ukuran array bash:sumber
seq
,yes
dan{1..5}
bukan POSIX 7.printf
penentu format. Bagaimana jika data berisi string format? Ini adalah cara yang benar untuk secara dinamis menentukan "presisi" (panjang):printf '%*s' "$N"
- biasakan untuk melampirkan string format dalam tanda kutip tunggal untuk mencegah ekspansi variabel di sana.Cukup banyak cara bagus yang telah disebutkan. Tidak bisa melupakan tua yang baik
seq
:sumber
{i..j}
Triknya tidak pernah mengembalikan rentang kosong.)Mungkin cara lain yang lebih umum dan bermanfaat bagi Anda:
Shell bash lebih kuat dari yang dipikirkan kebanyakan orang :)
sumber
yes
,printf
,for i in {1..5}
) bahwa jikan
adalah nol, ia mengembalikan string kosong tanpa ada status 1. Juga karena notasi matematika untuk perbandingan, mudah telah diimbangi dengan 1 (misalnya dengan mengubah<=
ke<
)Anda bisa menggunakan trik. Menggema variabel kosong tidak akan mencetak apa pun. Jadi, Anda dapat menulis:
Jika
$wojek1 $wojek2
...$wojek100
adalah variabel yang tidak ada, Anda akan mengulangi kata-kata Anda 100 kali tanpa hal lain.sumber
$_
bukannya$wojek
memperjelas niat.Ulangi
n
kali, cukup berin-1
koma di antara{}
:Ulangi 'helloworld' dua kali setelah gema pertama.
sumber
n
dari variabel?Hasil
sumber
Saya telah mengalami peringatan pipa yang rusak dengan
yes
solusinya, jadi inilah alternatif lain yang bagus:sumber
berdasarkan apa yang @pike isyaratkan
untuk setiap karakter dalam string gema string
Contoh tajuk yang digarisbawahi dengan
=
karakterakan menampilkan
Ini sepertinya port antara linux dan OS X dan itu membuat saya senang.
nJoy!
sumber
Jika Anda menggunakan BSD, Anda bisa menggunakannya
seq
.sumber
seq (GNU coreutils) 8.25
, ini memberiseq: format 'Hello, world' has no % directive
, memaksa arahan pemformatan untuk hadir. GNU coreutils digunakan misalnya pada banyak distribusi Linux dan Cygwin. Termasuk info di sini untuk mereka yang kehilangan info bahwa itu hanya berfungsi di BSD seq.output
sumber
Dengan asumsi Anda menginginkan sesuatu seperti
x
operator Perl , di mana Anda tidak secara otomatis mendapatkan baris baru di antara pengulangan:Saya secara eksplisit menggunakan
for
loop karena Anda tidak dapat menulis{1..$n}
di bash: ekspansi brace dilakukan sebelum substitusi variabel.sumber
Tidak persis built in ke linux, tetapi jika Anda memiliki python diinstal ..
Atau dalam satu baris, seperti yang disarankan komentator:
sumber
Tidak ada keajaiban di sini:
seq 5 | awk '{print "Hello World"}'
sumber
Coba yang ini:
Akan membuat (seratus dasbor):
sumber