-
Problème de tirets
Bonjour à tous!
J'ai un (léger) soucis, pas si léger que ça si j'en viens à faire appel à vous.
Je fait appel dans un shell à une sorte de fonction :
\chemin\fonction argument1 argument 2 ...
L'un de ces argument est sous la forme : 'A - B', soit :
\chemin\fonction arg1 arg2 'A - B' arg4 ...
Lorsque je passe 'A - B' en argument tel quel, pas de soucis du côté de "fonction" dans mon shell
Mais ça serait trop simple : j'ai besoin d'aller lire cet agument 'A - B' dans un fichier, ailleurs...
L'export de ce qui est contenu dans le fichier pour utilisation dans mon shell ne pose pas de pb lorsque les arguments sont différents d'un format 'A - B'.
Par exemple :
le fichier contient :
A
B
'A - B'
Mon malheur vient du fait qu'au niveau du shell, je vais disposer suite à l'export de ce qui est dans le fichier d'une variable "ENTREE=A" ou "ENTREE=B" ou "ENTREE='A - B'"
donc bien entendu me concernant et dans le but de renseigner convenablement les arguments de "fonction", je procède à la récupération de ce qui va derrière le =
en gros :
je dispose de $i dont l'echo renvoie
ENTREE=A
ce à quoi j'effectue RESP=${$i##*=}
si je fait echo $RESP alors on obtient A
Cool
Mais si j'applique la même démarche à $i+2, à savoir ici dans notre cas 'A - B', l'écho final de $RESP donne 'A - B' (et non plus ENTREE='A - B' pour ceux qui suivent, vu mes explications un peu foireuses)
Et là intervient mon problème : lorsque j'utilise $RESP en tant qu'argument dans ma fonction, les "paramètres" tels que A, ou B, pas de soucis, mais arrivé à 'A - B' j'obtiens une erreur :
export: `-': not a valid identifier
Pourtant si echo $RESP renvoie 'A - B' et que du coup au lieu de taper
fonction arg1 arg2 'A - B' .. je tape
fonction arg1 arg2 $RESP ...
pourquoi ai-je ce problème?
Quelle est la différence d'interprétation qui est faite de le taper "directement" ou de lui passer par l'intermédiaire d'une espèce de variable...???
(car j'ai testé avec '...', avec "...", avec ' " ..." ', avec ' ' ... ' ' etc etc, pas mal de combinaisons différentes en fait, voire toutes?)
Etant débutant en shell, j'aimerais comprendre (et c'est en lisant divers tutos que j'ai effectué mes tests avec les différentes combinaisons des quotes)
Merci à tous ceux qui prendront la peine d'arrive à cette phrase! et merci d'avance à ceux que cela inspirera
-
Euh, te serais-t-il possible de poster un exemple minimal de scripts/fichiers qui démontrent ton problème...
Et dans ce que tu as dit, si tu tape fonction arg1 arg2 'A - B' je pense que fonction verra A - B (sans les simples quotes).
-
Tout d'abord merci pour ta réponse,
Effectivement le passer sous dorme 'A - B' est équivalent à écrire A - B
Le pb venait de la fameuse fonction "fonction" interprétant directement un $X au lieu de sa valeur (ça tjrs pas compris comment elle fait pour être "plus forte" que le shell en évitant l'interprétation des variables, mais bref!!)
De plus, mon pb s'est volatilisé du jour où la décision de ne plus utiliser des arguments comportant des tirets (la nomenclature a changé, de 'A - B' pblmatique c'est passé à 'A_B', ahahah deux jours de cogitation pour rien!!)
Meci encore en tout cas, je n'hésiterai pas à vous solliciter si j'ai des mystères irrésolu en prog, ce forum étant pour moi une manne d'infos très précieuses!