Connect with us

Linux

Come ripetere un carattere ‘n’ volte in Bash


le diciamo che vuoi ripetere un carattere come ‘-‘ O ‘=‘ più volte durante la scrittura dello script bash. Nota che avevo bisogno di uno script veloce per lavorare su Linux, macOS e server FreeBSD per ripetere una stringa/carattere n volte. Un modo semplice per ripetere una stringa o un carattere n volte è utilizzare il comando echo/printf come segue:

echo '------------------------------------'
printf '%sn' '------------------------------------'


Ma ci deve essere un modo migliore. Ad esempio, qui ci sono esempi classici di Perl e Python che ripetono ‘-’80 volte:

One-liner Python:

python -c 'print "-" * 80'

Come ripetere un carattere ‘n’ volte in Bash

Proviamo questo esempio di funzione Linux e Unix Bash per ripetere una stringa/carattere ‘n’ volte con l’aiuto di bash for loop come segue:

# Repeat given char 80 times using shell function
repeat(){
	for i in {1..90}; do echo -n "$1"; done
}

Quindi tutto ciò che devo fare è chiamare repeat() come segue:

repeat '-'
echo
 
repeat '='
echo
 
repeat '~'; echo -e 'nHEAD 1ttHead 2ttHead 3ttttHead 4'; repeat '~'; echo

La mia soluzione è semplice e amichevole. Ha risolto il mio problema. Eppure ora sto diventando avido. Volevo vedere se potevo usare printf/echo e replicare l’esperienza one-liner di Perl/Python.

Ripetere un carattere o una stringa n volte usando printf

Il printf è una shell integrata ed esterna /bin/printf, usata per formattare e stampare ARGUMENTS. La sintassi è:

printf 'FORMAT' var
printf '%sn' 'Hello World'
printf -- '-%.0s' 1 2 3 4 5
printf -- '-%.0s' {1..5}
printf -- '-%.0s' {1..80}

In cui si,

  • Il doppio trattino”--” significa “flag di fine riga di comando”. Visto che ho bisogno di stampare -, il doppio trattino (--) dice al comando printf di non provare ad analizzare ciò che viene dopo le opzioni della riga di comando.
  • Bash si espande {1..5}. Per esempio, eco {1..5}, stampe 1 2 3 4 5. Così
    printf -- '-%.0sn' {1..5}
    diventa:
    printf -- '-%.0sn' 1 2 3 4 5
  • Il -%0s stampa singolo ‘-‘ dato 5 volte.
  • È possibile rimuovere il doppio trattino (---‘. Ad esempio:
    printf '~%.0sn' {1..80}

Nota di chiusura

Ho finito per usare quanto segue perché avevo bisogno di eseguire script sia su macOS/BSD che su Linux:

Guide solo per i sostenitori di Patreon ????

  • Nessuna pubblicità e tracciamento
  • Guide approfondite per sviluppatori e amministratori di sistema su Opensourceflare✨
  • Unisciti al mio Patreon per supportare i creatori di contenuti indipendenti e iniziare a leggere le ultime guide:

Aderire Patreon ?

# Repeat given char N times using shell function
repeat(){
	local start=1
	local end=${1:-80}
	local str="${2:-=}"
	local range=$(seq $start $end)
	for i in $range ; do echo -n "${str}"; done
}

Quindi lo eseguo come segue:

repeat 80 '-'; echo
 
repeat 40 '='; echo
 
# print Hello 5 times 
repeat 5 'Hello'; echo

Sono sicuro che qualcuno potrebbe inventare awk, sed, echo/printf e anche altre versioni. Ma, per ora, sono soddisfatto di quello che ho ottenuto. Come al solito, controlla le pagine man:
man bash
help printf
man seq


ANNUNCIO



Ti e piaciuto questo articolo?
Supporta il mio lavoro, facendo una donazione!

Click to comment

Leave a Reply

Esegui l'accesso per Commentare.

Di tendenza

Close Popup
Questo sito utilizza i cookie per migliorare servizi ed esperienza dei lettori. Se decidi di continuare la navigazione senza blocchi premi su Accetto, oppure continua tranquillamente la navigazione, nessun dato sulla tua navigazione verrà raccolto.
Close Popup
Privacy Settings saved!
Impostazioni

Quando visiti un sito Web, esso può archiviare o recuperare informazioni sul tuo browser, principalmente sotto forma di cookies. Controlla qui i tuoi servizi di cookie personali.

Questi cookie sono necessari per il funzionamento del sito Web e non possono essere disattivati nei nostri sistemi.

Cookie tecnici
Per utilizzare questo sito web usiamo i seguenti cookie tecnici necessari:
  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec
  • swpm_session

Google Adsense
Usiamo la pubblicità di Google solo per mantenere attivi i nostro sito. Con ip anonimizzati.

Rifiuta tutti i Servizi
Save
Accetta tutti i Servizi