# Echapper les espaces script bash

**URL:** <https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886 "2016-02-21T18:03:05Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/1 "2016-02-21T18:03:05Z")

</div>

Bonjour 🙂

J’essaye de récupèrer une valeur provenant d’une page html via un script bash. La valeur html est de la forme TITRE=Mon titre n° 1

Avec bash j’utilise la forme suivante :

```auto
TITRE=${URL_WEB}
# Affectation de la valeur TITRE
TITRE="${TITRE#*TITRE=}"
TITRE="${TITRE%% *}"
TITRE="$(echo "${TITRE}" | head -n 1)"
```

Le résultat est “Mon” il manque le reste, donc je pense que les espaces me posent problème…

Comment faire pour échapper les espaces et récupèrer la chaine complete ?

Merci !

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/2 "2016-02-21T18:03:05Z")

</div>

```auto
Tout simplement ?
```

Tout simplement ?

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/3 "2016-02-21T18:03:05Z")

</div>

Non cela ne change rien…

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/4 "2016-02-21T18:03:07Z")

</div>

Il faudrait que tu donne la ligne complète pour que l’on puisse t’aider, sinon la solution serait :

```auto

```

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/5 "2016-02-21T18:03:08Z")

</div>

En sortant TITRE=«&nbsp;${TITRE%% \*}&nbsp;» et réaffectant la variable TITRE à une autre j’obtiens bien le résultat attendu ![:doh:](https://www.debian-fr.org/uploads/default/original/1X/78536cf08b5cbccb06a10e44ddb8da50bfc1554d.gif "Doh!")  
Je ne comprend pas pourquoi !

```auto
TITRE=${URL_WEB}
# Affectation de la valeur TITRE
TITRE="${TITRE#*TITRE=}"
#TITRE="${TITRE%% *}"
TITRE="$(echo "${TITRE}" | head -n 1)"
TitreTEST=${TITRE}
```

La page HTML renvoie TITRE=Mon titre n° 1

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/6 "2016-02-21T18:03:08Z")

</div>

Je ne comprend pas ce que tu cherche à retirer avec :

```auto

```

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/7 "2016-02-21T18:03:25Z")

</div>

Bonjour,

En fait j’ai utilisé la méthode donné ici : [sed-et-remplacement-valeur-t35103.html#p355782](http://www.debian-fr.org/sed-et-remplacement-valeur-t35103.html#p355782)

Une page HTML me renvoie plein de valeur du type :

```auto
DONNEE1=xyz
DONNEE2=1234
TITRE=azerty
```

Avec Bash je récupère le contenu de la page html avec w3m que je stocke dans la variable RECUP\_WEB

```auto
RECUP_WEB=$(/usr/bin/w3m -dump http://monurl/mapage.php)

TITRE=${RECUP_WEB}
DONNEE1=${RECUP_WEB}

# Affectation de la valeur TITRE
TITRE="${TITRE#*TITRE=}"
TITRE="${TITRE%% *}"
TITRE="$(echo "${TITRE}" | head -n 1)"
# Affectation de la valeur DONNEE1
DONNEE1="${DONNEE1#*DONNEE1=}"
DONNEE1="${DONNEE1%% *}"
DONNEE1="$(echo "${DONNEE1}" | head -n 1)"
```

Est-ce que cela aide un peu plus à comprendre le problème?

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/8 "2016-02-21T18:03:26Z")

</div>

Tu veux enlever les espaces en fin de valeur ?  
Tu ne peux pas avec la méthode que tu utilise car ce n’est pas une expression régulière mais une expansion de chemin qui est utilisée.  
Je suis bien en peine je ne peux pas te proposer plus simple que :

```auto

```

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/9 "2016-02-21T18:03:27Z")

</div>

> [@](#):
>
> Tu veux enlever les espaces en fin de valeur ?

Non, je veux justement garder la chaine de texte entre les espaces ![:083](https://www.debian-fr.org/uploads/default/original/1X/d14bbab5e0eb9167fe7ed1d009c5a9b723425957.gif "yeux-ciel")

En fait si je fais ça en réaffectant ${TITRE} à $TitreTEST cela fonctionne :

```auto
TITRE=${URL_WEB}
# Affectation de la valeur TITRE
TITRE="${TITRE#*TITRE=}"
TITRE="$(echo "${TITRE}" | head -n 1)"
TitreTEST=${TITRE}
```

echo ${TITRETEST} =\> Mon titre n° 1

Par contre si je fais :

[code]TITRE=${URL\_WEB}

# Affectation de la valeur TITRE

TITRE=«&nbsp;${TITRE#\*TITRE=}&nbsp;»  
TITRE=«&nbsp;${TITRE%% \*}&nbsp;»  
TITRE=«&nbsp;$(echo «&nbsp;${TITRE}&nbsp;» | head -n 1)&nbsp;»[/code]  
echo ${TITRE} =\> Mon

La chaine est coupé après le premier espace ![:075](https://www.debian-fr.org/uploads/default/original/1X/660d70f9421e915a2561756e6d9f245d4f609347.gif "dequoi")

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/10 "2016-02-21T18:03:28Z")

</div>

Je dois être à coté de mes pompes, ne pas avoir les yeux en face des trous. On va faire autrement :

[code]TITRE=${URL\_WEB}

# Affectation de la valeur TITRE

TITRE="${TITRE#\*TITRE=}“  
TITRE=”$(echo “${TITRE}” | head -n 1)"  
TitreTEST=${TITRE}  
echo “#${TitreTEST}#”[/code]  
T’affiche quoi ?  
En quoi cela pose un problème ?  
Qu’est ce que tu voudrais obtenir ?

---

<div class="post-metadata">

**Author:** ![haleth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/ecc23a/32.png) [@haleth](https://www.debian-fr.org/u/haleth)\
**Post date:** [Février 21, 2016, 6:03 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/11 "2016-02-21T18:03:32Z")

</div>

Idem, j’ai pas compris en quoi le post #2 ne résout rien

Tu as toujours intérêt à mettre des quotes autour des variables, dès lors que tu as la moindre suspicion d’un potentiel espace dans la valeur;

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:04 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/12 "2016-02-21T18:04:02Z")

</div>

Bonjour,

@haleth  
Non cela ne change rien quand j’utilise TITRE="${TITRE%% \*}"

@MisterFreez  
Entre temps j’ai réécrit un truc similaire a ton code, par contre quelqu’un peut il m’expliquer vraiment l’utilité et la fonction du TITRE="${TITRE%% \*}"

Merci.

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:08 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/13 "2016-02-21T18:08:46Z")

</div>

Bonjour,

Personne ne peut me donner une explication du TITRE="${TITRE%% \*}" ?

Bon week !

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 6:08 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/14 "2016-02-21T18:08:47Z")

</div>

`phrase='Voici ma phrase'
premier_mot_de_ma_phrase="${phrase%% * }"`  
?

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:16 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/15 "2016-02-21T18:16:11Z")

</div>

Salut,

Oui je pense aussi comme toi…  
Etant donné que j’avais le problème qu’après l’espace le texte suivant n’était pas récupéré, j’en déduis aussi que cela permet de récupérer le premier mot…

---

<div class="post-metadata">

**Author:** ![lebardix](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lebardix/32/5999_2.png) [@lebardix](https://www.debian-fr.org/u/lebardix)\
**Post date:** [Février 21, 2016, 7:15 UTC](https://www.debian-fr.org/t/echapper-les-espaces-script-bash/58886/16 "2016-02-21T19:15:25Z")

</div>

Salut,  
Il faut changer IFS (Internal File separator) voir le man bash  
mais mémoriser l’état avant et restituer après

SAVE\_IFS=$IFS  
IFS=’\n’  
ton truc  
IFS=$SAVE\_IFS
