En TCL, Comment puis-je faire une utilisation variable de la valeur d'une autre variable

StackOverflow https://stackoverflow.com/questions/852157

  •  21-08-2019
  •  | 
  •  

Question

Je dois utiliser la valeur d'une variable dans une autre variable.

est ce que j'ai essayé ..

set cmd_ts "foo bar"
set confCmds {
    command1
    command2
    $cmd_ts
}
puts "confCmds = $confCmds"

Mais au lieu d'obtenir

confCmds = 
    command1
    command2
    foo bar

Je reçois:

confCmds =
    command1
    command2
    $cmd_ts

P.S. J'ai essayé ce qui suit sans résultat

  1. cmd_ts de $
  2. "cmd_ts de $"
  3. {$ cmd_ts}
  4. \ $ cmd_ts
Était-ce utile?

La solution

(presque) rien ne fonctionnera aussi longtemps que vous utilisez des accolades. La meilleure suggestion est d'utiliser la commande list:

set confCmds [list command1 command2 $cmd_ts]

Je dis (presque) parce que vous pouvez utiliser pour effectuer la substitution Subst variable sur confCmds, mais ce n'est pas vraiment ce que vous voulez et c'est semée d'embûches. Ce que vous voulez est une liste de mots, un ou plusieurs peuvent être définies par une variable. C'est précisément ce que la solution ci-dessus vous donne.

Si vous voulez, vous pouvez répartir les commandes sur plus d'une ligne en utilisant la barre oblique inverse:

set confCmds [list \
    command1 \
    command2 \
    $cmd_ts \
]

Cette solution suppose que ce que vous voulez une liste de tcl. Cela peut ou peut ne pas être ce que vous voulez, tout dépend de la façon dont vous traitez cette données en aval.

Dans un commentaire que vous avez écrit que ce que vous voulez vraiment est une chaîne d'éléments séparés saut de ligne, dans ce cas, vous pouvez simplement utiliser des guillemets doubles, par exemple:

set confCmds "
    command1
    command2
    $cmd_ts
"

Cela vous donnera une chaîne avec plusieurs lignes séparées par des sauts de ligne. Faites attention à essayer de traiter cela comme une liste de commandes (par exemple: ne pas faire 'foreach foo confCmds de $), car il peut échouer en fonction de ce qui est dans cmd_ts de $.

Autres conseils

La réponse de Bryan est bon, à part une faute de frappe, je ne peux pas fixer avec mon représentant. (La liste dans la première commande doit être terminée par un support carré).

Si vous voulez faire quelque chose d'utile avec les commandes, vous voulez probablement eux comme une liste, mais si vous voulez juste séparés par une nouvelle ligne faire à la fin:

set confCmds [join $confCmds "\n"]

Si vous devez avoir la liste définie comme vous l'avez, vous pouvez également utiliser la commande subst, qui effectuera la substitution que les accolades empêchent:

subst $confCmds
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top