Variables shell - concatenation

Résolu/Fermé
nuanda - 12 mai 2012 à 10:55
 nuanda - 14 mai 2012 à 03:39
Bonjour,

J'ai un script (il s'agit d'un makefile pour un programme en C) qui contient les variables:

input_path = ./input/inp.dat
DIR = ${shell awk '$$1 == "Dir" {print $$2}' $(input)}

La seconde ligne va chercher la chaine de caractere à droite de Dir dans le fichier input_path: output_path

Le probleme est que lorsque je souhaite creer une troisieme variable NEW à partir de DIR, il y a un espace (non voulu) à la fin de DIR.

NEW = $(DIR)/foo

echo NEW me retourne output_path /foo au lieu de output_path/foo

Je voudrais supprimer l'espace. Quelqu'un aurait-il une idée?? A noter que Google n'est pas tres utile pour ce coup ci car le signe dollar n'est pas reconnu par le moteur de recherche.... :(

Merci!

A voir également:

4 réponses

dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
12 mai 2012 à 15:28
hello
et en utilisant cette fonction
$(strip string)
    Removes leading and trailing whitespace from string and replaces each internal sequence of one or more whitespace characters with a single space. Thus, `$(strip a b c )' results in `a b c'. 

http://www.gnu.org/software/make/manual/make.html#Using-Variables
2
Marche tres bien!
Merci!
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
12 mai 2012 à 10:59
Salut,

man bash (Développement des paramètres)

$ DIR="output_path "

$ echo "${DIR}/foo"
output_path /foo

$ echo "${DIR% *}/foo"
output_path/foo

$
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
12 mai 2012 à 11:08
$ echo "${DIR/ /}/foo"
output_path/foo

Le fait aussi ;-))
0
Merci pour vos reponses. Cependant, ça ne marche pas pour moi...

echo ${DIR}
output_path

echo ${OUTPUT_DIR/ /}/foo
/foo

idem pour
echo ${OUTPUT_DIR% *}/foo
/foo

Les guillemets ne changent rien :(

NB: c'est pareil si je crée moi même DIR = "output_path"


Bizarre bizarre...
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
12 mai 2012 à 12:16
echo ${DIR}
output_path

echo ${OUTPUT_DIR/ /}/foo
/foo

Euh... si tu n'essaies pas d'afficher la même variable, forcément ça bugue ;-((
0
DIR et OUTPUT_DIR sont exactement les memes variables en fait, mais desolé pour la confusion.

Le "bug" ne vient donc pas de la :)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
12 mai 2012 à 12:28
Quel système ? Quel shell ?
0
Mac OS X

Je suis en bash.

Et comme je disais dans mon 1er post, ces commandes sont dans un Makefile (pour un code en C) donc le script est lancé avec la commande make. Je sais pas si ça a une infuence (??).

C'est assez etrange... Peut etre que la solution la plus simple serait de "couper" le dernier caractere de DIR (cad l'espace) ...

Mais malgré tout, j'aimerais bien comprendre pourquoi les trucs du type
echo ${DIR% *}/foo ne fonctionnent pas !
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
12 mai 2012 à 13:02
NEW = $(DIR)/foo
Oups je n'avais pas fait attention, mais la syntaxe est propre au Makefile. Les parenthèses ne font pas partie de la syntaxe du shell pour la construction de variables ;-(
0