Saya ingin secara dinamis membuat urutan string dengan memanipulasi array elemen dan membuat beberapa prosedur aritmatika.
for name in FIRST SECOND THIRD FOURTH FIFTH; do
$name = $(( $6 + 1 ))
$name = "${$name}q;d"
echo "${$name}"; printf "\n"
done
Hasil keinginan akan menjadi di bawah ini untuk $6
sama 0
.
1q;d
2q;d
3q;d
4q;d
5q;d
Tapi saya mendapatkan kesalahan ini
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
Saya kira itu sesuatu yang sederhana. Dulu bekerja ketika saya melakukan sesuatu seperti
FIRST=$(( $6 + 1 ))
FIRST="${FIRST}q;d"
FIRST=$(( $6 + 1 ))
Jawaban:
Pertama-tama tidak ada ruang
=
di sekitar dalam deklarasi variabel dalambash
.Untuk mendapatkan apa yang Anda inginkan, Anda dapat menggunakannya
eval
.Misalnya skrip sampel seperti milik Anda:
Cetakan:
Gunakan dengan
eval
hati-hati, beberapa orang menyebutnya jahat karena alasan yang masuk akal.declare
akan bekerja juga:juga mencetak:
sumber
!
tanda seru ituprintf '%s\n' "${!name}"
?bash
parameter..baca inideclare
/eval
:printf -v varname '%fmt' args
. Beberapa fungsi internal penyelesaian-bash menggunakan ini untuk panggilan-oleh-referensi. (berikan nama variabel yang akan disimpan).declare
hanya menetapkan variabel dalam lingkup lokal, sedangkaneval
pendekatan menetapkannya secara global.Jika Anda ingin mereferensikan variabel bash sambil menyimpan nama di variabel lain, Anda dapat melakukannya sebagai berikut:
Anda menyimpan nama variabel yang ingin Anda akses, katakanlah, var2 dalam kasus ini. Maka Anda mengaksesnya dengan
${!<varable name>}
mana<variable name>
adalah variabel memegang nama variabel yang ingin Anda akses.sumber
eval var=\$$holder
tetapieval
berbahaya!Itukah yang kamu coba?
sumber
Apa yang saya dapatkan dari kode Anda dan output yang Anda inginkan (koreksi saya jika saya salah):
Tidak ada penggunaan nama variabel "PERTAMA" / "KEDUA" / ..., Anda hanya perlu loop dengan indeks .. .
Ini akan melakukan pekerjaan:
for i in {1..5} ; do echo $i"q;d" ; done
sumber
SUM=$(($6 + $i)); echo $SUM"q;d"
, Saya melihat apa yang saya lakukan salah.