Bash aggiunge spazi finali per giustificare la stringa


20

Il mio codice attuale è simile al seguente:, x=${y:0:40}che limita la lunghezza della stringa a 40 caratteri. Nel caso in cui la stringa abbia una lunghezza inferiore a 40 caratteri, è possibile riempire gli spazi finali?

Quindi se il mio y="very short text"

Vorrei che il mio y fosse:

y = "testo molto breve (+25 spazi finali) "

Risposte:


20

Se quei caratteri sono tutti a byte singolo, ovvero se ti trovi in ​​una locale in cui il set di caratteri è a byte singolo (come iso8859-1) o se il set di caratteri della locale è UTF-8 ma il testo è solo ASCII, puoi farlo :

printf -v y %-40.40s "$y"

Questo coprirà sia il troncamento che l'imbottitura.

In caso contrario, puoi sempre aggiungere 40 spazi e utilizzare il tuo ${y:0:40}approccio.

printf -v pad %40s
y=$y$pad
y=${y:0:40}

zsh ha operatori dedicati per l'imbottitura sinistra e destra:

y=${(r:40:)y}

(fa anche il troncamento). zsh's printfconta in caratteri invece di byte, quindi non avrebbero bash' s questione di cui sopra. Tuttavia, zshper l' -vopzione è necessario 5.3 o più recente .

Vedi anche questa risposta a una domanda correlata per maggiori dettagli se ti trovi di fronte a personaggi che non hanno tutti la stessa larghezza.


14

Dovresti provare printf:

printf '%-40s' "$y"

10

Puro bash:

ten="          " 
forty="$ten$ten$ten$ten" 
y="very short text"
y="${y:0:40}${forty:0:$((40 - ${#y}))}"
echo "'${y}'"

Il metodo consiste nell'aggiungere 0-40 spazi a ogni stringa dopo averla troncata.

Output, (notare le posizioni delle singole virgolette):

'very short text                         '

1
Preferirei usare questo metodo, perché funzionerà direttamente sulle variabili e non è necessario l'output.
David Tabernero M.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.