Como aparar espaços em branco a partir de uma variável Bash?

Eu tenho um script de shell com este código:

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

Mas o código condicional sempre executa, porque "hg st" sempre imprime pelo menos um novo caractere de linha.

  • Existe uma maneira simples de tirar o espaço em branco de $var (como trim() em PHP)?

ou

  • Existe uma maneira padrão de lidar com esta questão?

Eu poderia usar sed ou AWK, mas eu'gostaria de pensar que existe uma solução mais elegante para este problema.

O Bash tem uma funcionalidade chamada **expansão de parâmetros*, que, entre outras coisas, permite a substituição de cordas com base nos chamados padrões** (os padrões assemelham-se a expressões regulares, mas existem diferenças e limitações fundamentais). [a linha original da flussence: Bash tem expressões regulares, mas estão bem escondidas:]

O seguinte demonstra como remover total espaço branco (mesmo do interior) de um valor variável.

$ 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
Comentários (11)

Eu sempre o fiz com sed

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

Se houver uma solução mais elegante, espero que alguém a poste.

Comentários (4)

Você pode excluir novas linhas com tr:

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