2010-03-07 6 views
1

J'essaye de faire un peu d'expansion de variables dans bash mais de toute façon le résultat est tronqué/tourné. Voici un exemple mon code:Expansion de variable Bash

x="no-cabac,level=3,ref=3,bframes=0,subme=0,weightp=0" 
tts="{$x}" 
echo $tts 

Cette impression: }no-cabac,level=3,ref=3,bframes=0,subme=0,weightp=0

Je pensais: {no-cabac,level=3,ref=3,bframes=0,subme=0,weightp=0}

Si je change tts à tts=abc{$x}qwe la sortie est }qweno-cabac,level=3,ref=3,bframes=0,subme=0,weightp=0

J'ai essayé d'échapper aux accolades et enlever les citations, ne fonctionne toujours pas. Je sais qu'il y a quelque chose qui doit être échappé mais je ne peux pas comprendre quoi.

bash --version sortie: GNU bash, version 3.2.48(21)-release (i686-pc-cygwin)

+0

Cela fonctionne bien pour moi avec 'bash GNU version 3.2.48 (1) -release (x86_64-pomme-darwin10.0)' –

Répondre

5

Vous obtenez votre $x d'ailleurs, et il a une \r à la fin. Essayez:

tts="{${x/$'\r'/}}" 
+0

Merci, c'était. J'ai eu mon fichier de script avec CRLFs, donc l'extra: -/ –

+0

BTW j'ai converti en LF et le script original a très bien fonctionné. –

+2

Juste un conseil de diagnostic: placez une valeur de variable (ou n'importe quelle chaîne) à '| od -a' pour voir une représentation caractère par caractère avec _whitespace et des caractères de contrôle avec des noms symboliques. Par exemple, un '\ r' montre comme' cr', '\ n' comme' nl', '\ t' comme' ht'. – mklement0