# Plusieurs espaces dans un echo

**URL:** <https://www.debian-fr.org/t/plusieurs-espaces-dans-un-echo/27062>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 10:30 UTC](https://www.debian-fr.org/t/plusieurs-espaces-dans-un-echo/27062 "2016-02-20T22:30:57Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 20, 2016, 10:30 UTC](https://www.debian-fr.org/t/plusieurs-espaces-dans-un-echo/27062/1 "2016-02-20T22:30:57Z")

</div>

Bonjour!  
J’aimerais afficher plusieurs espaces dans un echo. Cependant, il ne s’en affiche que 1 à chaque fois. Voici le bout de code en question ( ![:050](https://www.debian-fr.org/uploads/default/original/1X/f39ea155bb9aa53bb35c96cb14d0befda01d0b6e.gif "rire-mauve") kna )

`percentbar() {
	echo -n "["
	i=1 ; j=1
	while ["$i" -le "$(($1/2))"]; do
		echo -n "="
		i=$(($i+1))
	done
	echo -n ">"
	while ["$j" -le "$(((100-$1)/2))"]; do
		echo " "
		j=$(($j+1))
	done
	echo "]"
}`  
à la place de l’espace entre les doubles-quotes, je mets un “-” pour remplacer, mais c’est beaucoup moins estétique…

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 20, 2016, 10:31 UTC](https://www.debian-fr.org/t/plusieurs-espaces-dans-un-echo/27062/2 "2016-02-20T22:31:01Z")

</div>

Avec l’option -n sur la ligne echo où se trouve l’espace, ça fonctionne parfaitement :

[code]$ percentbar() {

> echo -n «&nbsp;[&nbsp;»  
> i=1 ; j=1  
> while [«&nbsp;$i&nbsp;» -le «&nbsp;$(($1/2))&nbsp;»]; do  
> echo -n «&nbsp;=&nbsp;»  
> i=$(($i+1))  
> done  
> echo -n «&nbsp;\>&nbsp;»  
> while [«&nbsp;$j&nbsp;» -le «&nbsp;$(((100-$1)/2))&nbsp;»]; do  
> echo -n " "  
> j=$(($j+1))  
> done  
> echo «&nbsp;]&nbsp;»  
> }  
> $ percentbar 30  
> [===============\>]  
> $ percentbar 100  
> [==================================================\>][/code]

C’était juste ça le souci (un bête oubli), ou bien j’ai compris la question de travers ?

---

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 20, 2016, 10:31 UTC](https://www.debian-fr.org/t/plusieurs-espaces-dans-un-echo/27062/3 "2016-02-20T22:31:01Z")

</div>

ben non, ça ne marche pas pour moi… enfin, juste la fonction dans un terminal, ça roule, mais dans le script que je l’utilise, non. Bon, je le met en entier ici, il faut regarder la partie pour mpd :

[code]#!/bin/sh  
#script pour avoir une barre de status dans dwm/wmii

percent() {  
NUM=$(echo “scale=2;(($1/$2)\*100)” | bc)

```
if ["$(echo $NUM | grep -Eo '^.[0-9]+')" != "" ]; then
	NUM=$(echo "$NUM" | grep -Eo '^[0-9]+')
else
	NUM=0
fi

```

}

```
# Usage : percentbar NUM

```

percentbar() {  
echo -n "["  
i=1 ; j=1  
while [“$i” -le “$(($1/2))”]; do  
echo -n "="  
i=$(($i+1))  
done  
echo -n "\>"  
while [“$j” -le “$(((100-$1)/2))”]; do  
echo -n " "  
j=$(($j+1))  
done  
echo -n “]”  
}

#DAEMON=$(ps axo comm | grep -o mplayer | head -n1)  
#if [-z “$DAEMON”]; then

# DAEMON=$(ps axo comm | grep -o wget | head -n1)

#fi  
#case $DAEMON in

## mplayer )

# #ajouter ceci dans le bashrc : alias mplayer=‘mplayer -v \> /tmp/mplayer.log’

# LOGFILE=/tmp/mplayer.log

# TOTALFRAMES=$(grep “frames total:” $LOGFILE |awk ‘{print $3}’)

# CURFRAME=$(tail -n1 $LOGFILE | grep -Eo “[0-9]+/” | tail -n1 | cut -d/ -f1)

# MPLAYERPERCENT=$(($CURFRAME\*100/$TOTALFRAMES))

# MPLAYERBAR=$(percentbar $MPLAYERPERCENT)

# MPLAYERTITLE=$(cat $LOGFILE | grep “Playing”)

# echo “$MPLAYERTITLE $MPLAYERBAR $MPLAYERPERCENT%”

# ;;

# wget )

# WGETLOG=/tmp/wget.log

# FILENAME=$(awk -F: ‘/Sauvegarde en/{ print $2 }’ $WGETLOG )

# PROGRESS=$(cat $WGETLOG | tail -n-2 | grep -Eo “[0-9]{1,3}%”)

# WGETBAR=$(percentbar $(cat $WGETLOG | tail -n-2 | grep -Eo “[0-9]{1,3}%” | cut -d% -f1) )

# echo “Télécharge :$FILENAME $WGETBAR”

# ;;

# \*)

```
i=1 #variable pour l'affichache des notifications des mails

##########Partie mpd########################

if ["$(mpc | grep 'playing')" != ""]; then
MPDSONG=$(mpc | grep -v 'playing' | grep -v 'volume')
MPDRATIO=$(mpc | grep 'playing' | grep -Eo '[0-9]+:[0-9]+/[0-9]+:[0-9]+')
MPDUSED=$(echo $MPDRATIO | grep -Eo '[0-9]+:[0-9]+/' | grep -Eo '[0-9]+:[0-9]+' | sed -e 's/:/./')
MPDTOTAL=$(echo $MPDRATIO | grep -Eo '/[0-9]+:[0-9]+' | grep -Eo '[0-9]+:[0-9]+' | sed -e 's/:/./')
percent $MPDUSED $MPDTOTAL ; MPD=$NUM
MPDBAR=$(percentbar $MPD)
else
MPDSONG=""
MPDBAR=""
fi

```

#### #Partie mails#######

```
if [-e /tmp/mails]; then
	NBLINES=$(cat /tmp/mails | wc -l) # on compte le nombre de lignes dans le fichier
		if [$NBLINES -gt 0]; then # on affiche que si ça en vaut le coup
			if [$i -gt $NBLINES]; then
			i=1
			fi
		MAILS=$(cat /tmp/mails | sed -n ${i}p )
		i=$(( $i + 1 ))
	
		fi
else
MAILS=""
fi

####Partie batterie+espace libre+CPU+heure####
BATTERIE=$(acpi -b | grep -Eo '[0-9]+%')
HOME=$(df -h /home | awk '{print $5}' | grep -Eo '[0-9]+%')
ROOT=$(df -h / | awk '{print $5}' | grep -Eo '[0-9]+%')
UPTIME=$(uptime | sed 's/.*://; s/,//g')
DATE=$(/bin/date +%d/%m/%Y' '%k:%M)
#####Partie pour le volume sonore######
if ["$(amixer get Master | tail -n 1 |cut -d [ -f4)" = "on]" ]; then
VOL=$(amixer get Master | grep -Eo '[0-9]+%')
else
VOL="OFF"
fi
####on affiche####
echo -n $1 $MPDSONG $MPDBAR '|' '/home:'$HOME '|' '/:'$ROOT '|' $UPTIME '|' 'Bat:'$BATTERIE '|' $MAILS '|' 'Vol:' $VOL '|' $DATE 

```

# ;;

#esac

exit 0

[/code]

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 20, 2016, 10:31 UTC](https://www.debian-fr.org/t/plusieurs-espaces-dans-un-echo/27062/4 "2016-02-20T22:31:01Z")

</div>

À la fin il faut entourer tes variables par des guillemets, sinon echo remplace les retours chariot par des espaces et concatène ensemble les espaces consécutifs.  
Au lieu de t’enquiquiner à mettre des guillemets partout, le plus simple est probablement de tout inclure à l’intérieur d’une seule paire de guillemets (des doubles-guillemets pour conserver l’expansion des variables shell) :

` ####on affiche####
   echo -n "$1 $MPDSONG $MPDBAR | /home:$HOME | /:$ROOT | $UPTIME | Bat:$BATTERIE | $MAILS | Vol: $VOL | $DATE"`  
Prends aussi l’habitude de mettre des guillemets partout quand tu récupères le résultat d’une commande dans une variable, sinon tu risques d’avoir des surprises dans certains cas particuliers (je n’ai pas retrouvé d’exemple – j’avoue j’ai à peine cherché – mais tu peux me croire sur parole j’ai eu des bugs qui ont été résolus de cette manière) :

```auto

```

---

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 20, 2016, 10:31 UTC](https://www.debian-fr.org/t/plusieurs-espaces-dans-un-echo/27062/5 "2016-02-20T22:31:02Z")

</div>

J’ai trouvé la solution, c’était ici le souci :

```auto

```

évidemment, les espaces n’étaient pas enregistrés dans la variable.  
Depuis le temps que je cherche…  
Merci!  
Du coup, ça change un peu la fin, comme tu le suggères syam, mais merci quand même 🙂
