GNU/Linux >> Linux Esercitazione >  >> Linux

Quando si imposta IFS per dividere su nuove righe, perché è necessario includere un backspace?

Perché come dice il manuale di bash riguardo alla sostituzione dei comandi:

Bash esegue l'espansione eseguendo il comando e sostituendo la sostituzione del comando con l'output standard del comando, eliminando eventuali newline finali.

Quindi, aggiungendo \b impedisci la rimozione di \n .

Un modo più pulito per farlo potrebbe essere usare $'' citando, in questo modo:

IFS=$'\n'

Mi sono appena ricordato il modo più semplice. Testato con bash su debian wheezy.

IFS="
"

non sto scherzando :)


È un hack a causa dell'uso di echo e sostituzione dei comandi.

prompt> x=$(echo -en "\n")
prompt> echo ${#x}
0
prompt> x=$(echo -en "\n\b")
prompt> echo ${#x}
2

Il $() elimina le nuove righe finali e \b impedisce \n dall'essere una nuova riga finale pur essendo altamente improbabile che appaia in qualsiasi testo. IFS=$'\n' è il modo migliore per impostare IFS in modo che si divida sui newline.


Linux
  1. Quando è necessaria la doppia virgoletta?

  2. Perché Printf è meglio di Echo?

  3. In `mentre Ifs=Leggi..`, perché Ifs non ha alcun effetto?

  4. Cambia carattere nel comando Echo?

  5. Esempi di comandi echo in Linux

Comando Echo in Linux (con esempi)

16 Esempi di comandi Echo in Linux

Echo Command in Linux con esempi

echo Command in Linux:7 esempi pratici

Come dividere una stringa con virgolette (come argomenti di comando) in bash?

Perché slabtop -o restituisce solo le prime 23 righe quando il comando viene reindirizzato?