En script bash ubuntu comment enlever les espaces d'une variable
La chaîne sera
3918912k
Voulez-vous supprimer tous les espaces vides.
En script bash ubuntu comment enlever les espaces d'une variable
La chaîne sera
3918912k
Voulez-vous supprimer tous les espaces vides.
Essayez de faire cela dans un shell:
var=" 3918912k"
echo ${var//[[:blank:]]/}
Cela utilise l'expansion de paramètres (c'est une fonctionnalité non posix)
[[:blank:]]
est une classe regex POSIX (supprime les espaces, les tabulations...), voir http://www.regular-expressions.info/posixbrackets.html
Étant donné que vous utilisez bash, la manière la plus rapide serait:
shopt -s extglob # Autoriser l'extension du globbing
var=" lakdjsf lkadsjf "
echo "${var//+([[:space:]])/}"
C'est plus rapide car cela utilise des fonctions intégrées au lieu de démarrer des processus supplémentaires.
Cependant, si vous souhaitez le faire de manière conforme à POSIX, utilisez sed
:
var=" lakdjsf lkadsjf "
echo "$var" | sed 's/[[:space:]]//g'
Une façon amusante de supprimer tous les espaces d'une variable est d'utiliser printf :
$ myvar='une variable sympa avec beaucoup d\'espaces dedans'
$ printf -v myvar '%s' $myvar
$ echo "$myvar"
unevariablesympaavecdesespacesdedans
Il s'avère que c'est légèrement plus efficace que myvar="${myvar// /}"
, mais pas sûr par rapport aux globales (*
) qui peuvent apparaître dans la chaîne. Donc ne l'utilisez pas dans du code de production.
Si vous voulez vraiment utiliser cette méthode et que vous êtes vraiment préoccupé par le problème de globbing (et vous devriez l'être), vous pouvez utiliser set -f
(qui désactive complètement le globbing) :
$ ls
file1 file2
$ myvar=' une variable sympa avec des espaces et oh! non! il y a une globale * dedans'
$ echo "$myvar"
une variable sympa avec des espaces et oh! non! il y a une globale * dedans
$ printf '%s' $myvar ; echo
unevariablesympaavecdesespacesetoh!non!ilyauneglobale*dedans
$ # Vous voyez le problème ? Corrigeons cela avec set -f :
$ set -f
$ printf '%s' $myvar ; echo
unevariablesympaavecdesespacesetoh!non!ilyauneglobale*dedans
$ # Comme nous aimons le globbing, nous désactivons l'option f :
$ set +f
J'ai posté cette réponse juste parce que c'était amusant, ne l'utilisez pas en pratique.
Vous pouvez également utiliser echo
pour supprimer les espaces vides, soit au début, soit à la fin de la chaîne, mais aussi les espaces répétés à l'intérieur de la chaîne.
$ myVar=" kokor iiij ook "
$ echo "$myVar"
kokor iiij ook
$ myVar=`echo $myVar`
$
$ # myVar n'est pas défini sur "kokor iiij ook"
$ echo "$myVar"
kokor iiij ook
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.