#1 Le 04/04/2018, à 09:00
- Crestey
[Résolu] echo ${var::5} marche pas si dans un script.
Bonjour,
Je veux extraire (pour l'exemple) les 5 premiers caractères d'une chaîne :
crestey64@PC3:~$ var="0123456789"
crestey64@PC3:~$ echo $var
0123456789
crestey64@PC3:~$ echo ${var::5}
01234
crestey64@PC3:~$
Super !
Alors je mets tout ça dans un script, et de qu'est-ce que je m'aperçois-je ?
crestey64@PC3:~$ cat essai
#!/bin/bash
var="0123456789"
echo $var
echo ${var::5}
crestey64@PC3:~$ sh essai
0123456789
essai: 4: essai: Bad substitution
crestey64@PC3:~$
Quel est ce mystère SVP ?
Dernière modification par Crestey (Le 04/04/2018, à 09:18)
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#2 Le 04/04/2018, à 09:07
- pingouinux
Re : [Résolu] echo ${var::5} marche pas si dans un script.
Bonjour,
C'est parce que tu utilses sh.
Il faut faire :
bash essai
ou
chmod u+x essai
./essai
Hors ligne
#3 Le 04/04/2018, à 09:18
- Crestey
Re : [Résolu] echo ${var::5} marche pas si dans un script.
Merci !
Ça reste un mystère pour moi, mais au moins maintenant ça marche !
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#4 Le 04/04/2018, à 10:56
- bruno
Re : [Résolu] echo ${var::5} marche pas si dans un script.
Il n'y a pas de mystère
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 févr. 17 2016 /bin/sh -> dash
Si tu écris du code avec une syntaxe spécifique à bash, tu dois utiliser l'interpréteur bash.
Si ton code utilise une syntaxe conforme à la norme POSIX (pas de « bashismes »), tu peux utiliser n'importe quel interpréteur shell, dont dash.
#5 Le 04/04/2018, à 11:20
- Crestey
Re : [Résolu] echo ${var::5} marche pas si dans un script.
Ok merci bruno, la brume se lève. A ta connaissance quel est le meilleur endroit sur la toile pour consulter la norme POSIX.
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#6 Le 04/04/2018, à 11:59
- bruno
Re : [Résolu] echo ${var::5} marche pas si dans un script.
Si tu y tiens, je te recommande cette lecture (en anglais) http://www.gnu.org/software/autoconf/ma … able-Shell
Mais il n'y a aucune obligation à faire des scripts conformes à POSIX sauf si tu as des impératifs de portabilité.
D'autant plus que bash est présent sur la plupart des systèmes de type Linux/Unix (y compris MacOS X) et que tu as pris soin d'utiliser le bang #!/bin/bash en tête de ton script.