1238 votes

Comment tailler un espace de bash variable ?

J'ai un script shell avec ce code:

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

Mais le conditionnel code s'exécute toujours parce qu' hg st toujours des tirages au moins un caractère de saut de ligne.

  • Est-il un moyen simple de suppression des espaces de $var (comme trim() en php)?

ou

  • Est-il un standard façon de traiter ce problème?

Je pourrais utiliser sed ou awk, mais j'aimerais penser qu'il existe une solution plus élégante à ce problème.

1435voto

makevoid Points 1921

Vieille question, mais je n’ai pas trouvé une simple réponse, alors essayez ceci :

Xargs fera la compensation pour vous, c' est une commande/programme, aucun paramètre, retourne la chaîne parée, facile que ça !

MISE EN GARDE :

donne

pas

1151voto

MattyV Points 719

Cela permettra d'éliminer tous les espaces ...

echo " test test test " | tr -d ' '

donc, il en résulte

testtesttest

Cela permettra de supprimer les espaces à droite...

echo " test test test " | sed 's/ *$//'

qui résultats dans

 test test test

Cela va supprimer les espaces à gauche...

echo " test test test " | sed 's/^ *//'

qui résultats dans

test test test

Cela permettra d'éliminer à la fois de fuite et les espaces

echo " test test test " | sed -e 's/^ *//' -e 's/ *$//'

qui résultats dans

test test test

476voto

bashfu Points 239

« Remove menant & trailing whitespace d’une variable Bash », http://codesnippets.joyent.com/posts/show/1816

Voici la même enveloppé dans une fonction :

Vous passez la chaîne à être taillés en forme entre guillemets. par exemple :

108voto

flussence Points 5870

Bash a une fonctionnalité appelée paramètre d'extension, qui, entre autres choses, permet à la chaîne de remplacement basées sur des modèles (les modèles ressemblent à des expressions régulières, mais il y a des différences fondamentales et les limites). [flussence original ligne: Bash a des expressions régulières, mais ils sont bien cachés:]

La liste suivante montre comment faire pour supprimer tous les espaces blancs (même à partir de l'intérieur) à partir de la valeur d'une variable.

$ 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

72voto

Brian Cain Points 57
#!/bin/sh

trim()
{
    trimmed=$1
    trimmed=${trimmed%% }
    trimmed=${trimmed## }

    echo "$trimmed"
}


HELLO_WORLD=$(trim "hello world  ")
FOO_BAR=$(trim " foo bar")
BOTH_SIDES=$(trim " both sides  ")
echo "'${HELLO_WORLD}', '${FOO_BAR}', '${BOTH_SIDES}'"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X