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.
$var
(come trim()
in PHP)?o
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