Plusieurs espaces dans un echo

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 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…

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

[code]$ 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 “]”
}
$ percentbar 30
[===============> ]
$ percentbar 100
[==================================================>][/code]

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

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]

À 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) :

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

é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 :slight_smile: