Jak mogę pobrać wartość zmiennej bash, jeśli mam nazwę zmiennej jako ciąg?
var1="this is the real value"
a="var1"
Do something to get value of var1 just using variable a.
Kontekst:
Mam kilka AMI ( Amazon Machine Image ) i chcę odpalić kilka instancji każdego AMI. Gdy tylko zakończą ładowanie, chcę skonfigurować każdą instancję zgodnie z jej typem AMI. Nie chcę piec wielu skryptów ani tajnych kluczy w żadnym AMI, więc przygotowałem uogólniony skrypt startowy i umieściłem go na S3 z publicznie dostępnym linkiem. W rc.local umieściłem mały fragment kodu, który pobiera skrypt startowy i wykonuje go. To wszystko, co mam w AMI. Następnie każdy AMI uzyskuje dostęp do wspólnego skryptu konfiguracyjnego, który ma zastosowanie do wszystkich AMI i specjalnych skryptów instalacyjnych dla każdego. Te skrypty są prywatne i wymagają podpisanego adresu URL, aby uzyskać do nich dostęp.
Tak więc teraz, kiedy uruchamiam instancję AMI (my_private_ami_1), przekazuję podpisany adres URL dla jeszcze jednego pliku prezentowanego na S3, który zawiera podpisany adres URL dla wszystkich prywatnych skryptów pod względem pary klucz / wartość.
config_url="http://s3.amazo.../config?signature"
my_private_ami_1="http://s3.amazo.../ami_1?signature"
...
Po uruchomieniu skryptu startowego pobiera powyższy plik i source
to wszystko. Następnie sprawdza typ AMI i wybiera dla siebie poprawny skrypt instalacyjny.
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
Więc teraz mogę mieć ogólny kod, który może uruchamiać instancje niezależnie od ich typów AMI, a instancje mogą same o siebie zadbać.
Bad substitution
błąd./bin/sh
? Jeśli tak, spróbuj użyć/bin/bash
zamiast tego. Począwszy od Debian Squeeze,/bin/sh
został zmieniony na dowiązanie symbolicznedash
zamiastbash
.dash
nie obsługuje tej konkretnej składni i wyświetliBad substitution
błąd.ustawia Z na „foo”
Uważaj przy używaniu,
eval
ponieważ może to pozwolić na przypadkowe wykluczenie kodu przez wartości w${Y}
. Może to spowodować szkody przez wstrzyknięcie kodu.Na przykład
stworzy
/tmp/eval-is-evil
. To teżrm -rf /
oczywiście może być trochę .źródło
Zmodyfikowałem słowa kluczowe wyszukiwania i rozumiem :).
Dziękuję za Twój czas.źródło
${Y}
. Zobacz mój dodatek w odpowiedzi użytkownika „anon”.Dla innych użytkowników zsh sposobem na osiągnięcie tego samego, co zaakceptowana odpowiedź, jest użycie:
${(P)a}
Nazywa się to zastępowaniem nazwy parametru
źródło
Nowoczesne powłoki już obsługują tablice (a nawet tablice asocjacyjne). Więc proszę, używaj ich i używaj mniej wartości eval.
wtedy kiedy chcesz to wywołać, echo $ {tablica [0]}
źródło
$1
)?Na podstawie odpowiedzi: https://unix.stackexchange.com/a/111627
źródło
Miał ten sam problem z tablicami, oto jak to zrobić, jeśli manipulujesz również tablicami:
Spowoduje to:
źródło