Bagaimana saya bisa mengambil nilai variabel bash jika saya memiliki nama variabel sebagai string?
var1="this is the real value"
a="var1"
Do something to get value of var1 just using variable a.
Konteks:
Saya memiliki beberapa AMI ( Amazon Machine Image ) dan saya ingin menjalankan beberapa contoh dari setiap AMI. Segera setelah mereka selesai boot, saya ingin mengatur setiap instance sesuai dengan jenis AMI-nya. Saya tidak ingin memanggang banyak skrip atau kunci rahasia di dalam AMI apa pun, jadi saya menyiapkan skrip startup umum dan saya menaruhnya di S3 dengan tautan yang dapat diakses publik. Di rc.local saya meletakkan sepotong kecil kode yang mengambil skrip startup dan menjalankannya. Ini semua yang saya miliki di AMI. Kemudian setiap AMI mengakses skrip konfigurasi umum yang berlaku untuk semua AMI dan skrip pengaturan khusus untuk masing-masing. Skrip ini bersifat pribadi dan memerlukan URL yang ditandatangani untuk mengaksesnya.
Jadi sekarang, ketika saya memunculkan instance AMI (my_private_ami_1), saya meneruskan URL yang ditandatangani untuk satu file lagi yang disajikan pada S3 yang berisi URL yang ditandatangani untuk semua skrip pribadi dalam hal pasangan kunci / nilai.
config_url="http://s3.amazo.../config?signature"
my_private_ami_1="http://s3.amazo.../ami_1?signature"
...
Ketika skrip startup berjalan, itu mengunduh file di atas dan source
itu. Kemudian ia memeriksa jenis AMI-nya dan memilih skrip pengaturan yang benar untuk dirinya sendiri.
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
Jadi sekarang saya dapat memiliki kode generik yang dapat mem-instance instans terlepas dari tipe AMI mereka dan instans dapat mengatur sendiri.
Bad substitution
error./bin/sh
? Jika demikian, coba gunakan/bin/bash
sebagai gantinya. Dari Debian Squeeze dan seterusnya,/bin/sh
diubah menjadi symlink untukdash
alih - alihbash
.dash
tidak mendukung sintaksis khusus ini dan akan menghasilkanBad substitution
kesalahan.set Z ke "foo"
Berhati-hatilah menggunakan
eval
karena ini dapat memungkinkan pengecualian kode secara langsung melalui nilai-nilai di${Y}
. Ini dapat menyebabkan kerusakan melalui injeksi kode.Sebagai contoh
akan membuat
/tmp/eval-is-evil
. Ini juga bisa menjadi beberaparm -rf /
, tentu saja.sumber
Memodifikasi kata kunci pencarian saya dan mendapatkannya :).
Terima kasih atas waktunya.sumber
${Y}
. Lihat tambahan saya di jawaban pengguna "anon".Untuk sesama pengguna zsh saya, cara untuk mencapai hal yang sama dengan jawaban yang diterima adalah dengan menggunakan:
${(P)a}
Ini disebut penggantian nama Parameter
sumber
shell modern sudah mendukung array (dan bahkan array asosiatif). Jadi tolong gunakan mereka, dan gunakan eval lebih sedikit.
lalu ketika Anda ingin menyebutnya, echo $ {array [0]}
sumber
$1
)?Berdasarkan jawaban: https://unix.stackexchange.com/a/111627
sumber
Mengalami masalah yang sama dengan array, berikut adalah cara melakukannya jika Anda juga memanipulasi array:
Ini akan menampilkan:
sumber