Come tagliare gli spazi bianchi da una variabile Bash?

Ho uno script di shell con questo codice:

var=`hg st -R "$path"`
if [ -n "$var" ]; then
    echo $var
fi

Ma il codice condizionale viene sempre eseguito, perché hg st stampa sempre almeno un carattere newline.

  • C'è un modo semplice per togliere gli spazi bianchi da $var (come trim() in PHP)?

o

  • C'è un modo standard per affrontare questo problema?

Potrei usare sed o AWK, ma mi piacerebbe pensare che ci sia una soluzione più elegante a questo problema.

Bash ha una caratteristica chiamata parameter expansion, che, tra le altre cose, permette la sostituzione delle stringhe basata sui cosiddetti patterns (i pattern assomigliano alle espressioni regolari, ma ci sono differenze e limitazioni fondamentali). [La linea originale di flussence: Bash ha le espressioni regolari, ma sono ben nascoste:]

Quanto segue dimostra come rimuovere tutti gli spazi bianchi (anche dall'interno) da un valore variabile.

$ var='abc def'
$ echo "$var"
abc def
# Note: flussence's original expression was "${var/ /}", which only replaced the *first* space char., wherever it appeared.
$ echo -n "${var//[[:space:]]/}"
abcdef
Commentari (11)

L'ho sempre fatto con sed

  var=`hg st -R "$path" | sed -e 's/  *$//'`

Se c'è una soluzione più elegante, spero che qualcuno la pubblichi.

Commentari (4)

Puoi cancellare le newlines con tr:

var=`hg st -R "$path" | tr -d '\n'`
if [ -n $var ]; then
    echo $var
done
Commentari (1)