Comment supprimer l’espace de la chaîne?

Dans ubuntu bash script comment supprimer l’espace d’une variable

la chaîne sera

3918912k 

Vous voulez supprimer tous les espaces vides.

Essayez de faire ceci dans un shell:

 s=" 3918912k" echo ${s//[[:blank:]]/} 

Cela utilise l’ extension des parameters (c’est une fonctionnalité non posix )

[[:blank:]] est une classe regex POSIX (suppression des espaces, tabulations …), voir http://www.regular-expressions.info/posixbrackets.html

Les outils sed ou tr feront pour vous en échangeant les espaces pour rien

sed 's/ //g'

tr -d ' '

Exemple:

 $ echo " 3918912k " | sed 's/ //g' 3918912k 

Vous pouvez également utiliser echo pour supprimer les espaces vides, au début ou à la fin de la chaîne, mais également en répétant les espaces à l’intérieur de la chaîne.

 $ myVar=" kokor iiij ook " $ echo "$myVar" kokor iiij ook $ myVar=`echo $myVar` $ $ # myVar is not set to "kokor iiij ook" $ echo "$myVar" kokor iiij ook 

Puisque vous utilisez bash, le moyen le plus rapide serait:

 shopt -s extglob # Allow extended globbing var=" lakdjsf lkadsjf " echo "${var//+([[:space:]])/}" 

Il est plus rapide car il utilise des fonctions intégrées au lieu de lancer des processus supplémentaires.

Cependant, si vous voulez le faire de manière compatible 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='a cool variable with lots of spaces in it' $ printf -v myvar '%s' $myvar $ echo "$myvar" acoolvariablewithlotsofspacesinit 

Il s’avère que c’est un peu plus efficace que myvar="${myvar// /}" , mais pas sûr en ce qui concerne les globs ( * ) qui peuvent apparaître dans la chaîne. Donc , ne l’utilisez pas dans le code de production.

Si vous voulez vraiment utiliser cette méthode et que vous êtes vraiment inquiet au sujet de la globalisation (et vous devriez vraiment le faire), vous pouvez utiliser set -f (qui désactive le globbing):

 $ ls file1 file2 $ myvar=' a cool variable with spaces and oh! no! there is a glob * in it' $ echo "$myvar" a cool variable with spaces and oh! no! there is a glob * in it $ printf '%s' $myvar ; echo acoolvariablewithspacesandoh!no!thereisaglobfile1file2init $ # See the trouble? Let's fix it with set -f: $ set -f $ printf '%s' $myvar ; echo acoolvariablewithspacesandoh!no!thereisaglob*init $ # Since we like globbing, we unset the f option: $ set +f 

J’ai posté cette réponse simplement parce que c’est drôle, de ne pas l’utiliser en pratique.