2010-07-07 8 views

Répondre

4

Vous pouvez utiliser indirection Bash comme ceci:

INPUT=10  
OUTPUT_IN=20  
KEYWORD="IN"  
var="OUTPUT_$KEYWORD" 
echo "${!var}" 

Cependant, vous devriez probablement utiliser un tableau ou une autre méthode pour faire ce que vous voulez. De BashFAQ/006:

Mettre des noms de variables ou toute autre syntaxe bash dans les paramètres est généralement une mauvaise idée. Cela viole la séparation entre le code et les données; et en tant que tel vous amène sur une pente glissante vers les bugs, les problèmes de sécurité, etc. Même quand vous savez que vous avez «bien compris», parce que vous «savez et comprenez exactement ce que vous faites», des bugs nous arrivent tous et ça paye Respecter les pratiques de séparation pour minimiser l'étendue des dégâts qu'elles peuvent causer. En dehors de cela, il rend également votre code non évident et non transparent.

Normalement, dans les scripts bash, vous n'avez pas du tout besoin de références indirectes. Généralement, les gens cherchent une solution lorsqu'ils ne comprennent pas ou ne connaissent pas Bash Arrays ou n'ont pas entièrement pris en compte d'autres fonctionnalités Bash telles que les fonctions. Vous devez éviter d'utiliser eval si possible. Si la variable contient une commande shell, le shell peut exécuter cette commande, que vous le vouliez ou non. Cela peut conduire à des résultats inattendus, en particulier lorsque des variables peuvent être lues à partir de sources non fiables (comme des utilisateurs ou des fichiers créés par l'utilisateur).

Bash 4 a des tableaux associatifs qui vous permettent de le faire:

array[in]=10 
array[out]=20 
index="out" 
echo "${array[$index]}" 
Questions connexes