Qui n’a jamais ete confronte au traitment des espaces par BASH.Je m’explique, par defaut lorsque vous ecrivez un script en BASH, celui ci traite les espaces comme des retours chariots. Mais POURQUOI diantre ….
Pour expliquer cela, il faut se tourner du cote de la variable IFS de BASH (Internal Field Separator). Par defaut, IFS contient un espace, une tabulation et un retour chariot (nous somme s sous Linux, donc nous ne traiterons ici que du \n). Nous allons jeter une oeil du cote de la bible de BASH, j’ai nomme : BIBLE BASH et notamment ici.
Nous avons donc pu voir que nous pouvons re-definir cette variable.
Un exemple valant bien mieux qu’un long discours :
- le script [bash_space.sh]
#!/bin/bash # Nous desirons que BASH n'interprete # que les retours chariots comme separateur IFS=$'\n'; for i in `more $1` do echo $i done |
- Le fichier d’exemple contenant les espaces [space_file]
Un fichier avec pleins d'espaces pour voir
si notre
script prend uniquement
le retour
chariot
comme separateur |
- Le resultat SANS definir la variable IFS
rdd@rddbox:~/dev/scripts$ ./bash_space space_file
Un
fichier
avec
pleins
d'espaces
pour
voir
si
notre
script
prend
uniquement
le
retour
chariot
comme
separateur |
- Et le resultat AVEC la variable IFS definie
rdd@rddbox:~/dev/scripts$ ./bash_space space_file
Un fichier avec pleins d'espaces pour voir
si notre
script prend uniquement
le retour
chariot
comme separateur |
Voila, vous pouvez utiliser cette astuce pour definir vous meme votre separateur, bien que l’on preferera la commande awk qui est un concentre sur-puissant pour ce type d’operation (dans un prochain billet).
3 réponses sur « BASH et les espaces »
[…] This post was mentioned on Twitter by RDD. RDD said: BASH et les espaces http://bit.ly/ccVoz0 […]
Bouhhhh !
Corrige moi ca :
<> for i in `more $1`
C’est fait. Quoique for in in c’etait pas mal non plus 🙂
Merci en tout cas mec.