Saya ingin membuat urutan string secara dinamis 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 dengan .
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"
Jawaban yang Diterima:
Pertama-tama tidak boleh ada spasi di sekitar =
dalam deklarasi variabel di bash
.
Untuk mendapatkan apa yang Anda inginkan, Anda dapat menggunakan eval
.
Misalnya contoh skrip seperti milik Anda :
#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
eval "$name"="'$(( $i + 1 ))q;d'"
printf '%sn' "${!name}"
i=$(( $i + 1 ))
done
Cetakan :
1q;d
2q;d
3q;d
4q;d
5q;d
Gunakan eval
hati-hati, beberapa orang menyebutnya jahat untuk beberapa alasan yang sah.
declare
akan bekerja juga :
#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
declare "$name"="$(( $i + 1 ))q;d"
printf '%sn' "${!name}"
i=$(( $i + 1 ))
done
juga mencetak :
1q;d
2q;d
3q;d
4q;d
5q;d
Apa yang Terjadi Saat Saya Mengeksekusi File Di Shell?
Bagaimana Cara Menerapkan Perubahan Grup Pengguna yang Baru Ditambahkan Tanpa Perlu Reboot??