Comment puis-je récupérer une valeur de variable bash si j'ai le nom de variable sous forme de chaîne?
var1="this is the real value"
a="var1"
Do something to get value of var1 just using variable a.
Le contexte:
J'ai des AMI ( Amazon Machine Image ) et je souhaite lancer quelques instances de chaque AMI. Dès qu'ils ont fini de démarrer, je souhaite configurer chaque instance en fonction de son type d'AMI. Je ne veux pas créer beaucoup de scripts ou de clés secrètes dans une AMI, j'ai donc préparé un script de démarrage généralisé et je l'ai mis sur S3 avec un lien accessible au public. Dans rc.local, j'ai mis un petit morceau de code qui récupère le script de démarrage et l'exécute. C'est tout ce que j'ai dans les AMI. Ensuite, chaque AMI accède à un script de configuration commun qui s'applique à toutes les AMI et à des scripts de configuration spéciaux pour chacune. Ces scripts sont privés et nécessitent une URL signée pour y accéder.
Alors maintenant, lorsque je déclenche une instance d'une AMI (my_private_ami_1), je passe une URL signée pour un autre fichier présenté sur S3 qui contient une URL signée pour tous les scripts privés en termes de paire clé / valeur.
config_url="http://s3.amazo.../config?signature"
my_private_ami_1="http://s3.amazo.../ami_1?signature"
...
Lorsque le script de démarrage s'exécute, il télécharge le fichier ci-dessus et source
c'est tout. Ensuite, il vérifie son type d'AMI et choisit le script d'installation correct pour lui-même.
ami\_type=GET AMI TYPE #ex: sets ami\_type to my\_private\_ami\_1
setup\_url=GET THE SETUP FILE URL BASED ON AMI\_TYPE # this is where this problem arises
Alors maintenant, je peux avoir un code générique qui peut déclencher des instances indépendamment de leurs types d'AMI et les instances peuvent prendre soin d'elles-mêmes.
Bad substitution
erreur./bin/sh
? Si tel est le cas, essayez d'utiliser à la/bin/bash
place. À partir de Debian Squeeze, a/bin/sh
été changé pour devenir un lien symbolique pourdash
au lieu debash
.dash
ne prend pas en charge cette syntaxe particulière et affichera uneBad substitution
erreur.définit Z sur "foo"
Faites attention à l' aide
eval
car cela peut permettre excution accidential code par des valeurs dans${Y}
. Cela peut causer des dommages par injection de code.Par exemple
créerait
/tmp/eval-is-evil
. Cela pourrait aussi être certainsrm -rf /
, bien sûr.la source
J'ai modifié mes mots clés de recherche et je l'ai compris :).
Merci pour votre temps.la source
${Y}
. Voir mon ajout dans la réponse de l'utilisateur "anon".Pour mes collègues utilisateurs de zsh, le moyen d'accomplir la même chose que la réponse acceptée est d'utiliser:
${(P)a}
C'est ce qu'on appelle le remplacement du nom du paramètre
la source
les shells modernes prennent déjà en charge les tableaux (et même les tableaux associatifs). Veuillez donc les utiliser et utiliser moins d'Eval.
puis quand vous voulez l'appeler, echo $ {array [0]}
la source
$1
)?Basé sur la réponse: https://unix.stackexchange.com/a/111627
la source
J'ai eu le même problème avec les tableaux, voici comment le faire si vous manipulez également des tableaux:
Cela produira:
la source