GNU/Linux >> Belajar Linux >  >> Linux

Nama Variabel Bash Dinamis (variabel)?

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

Linux
  1. Mengapa Mengatur Variabel Sebelum Perintah Legal Di Bash?

  2. Menggunakan Referensi Ke Variabel Bash String Di Sed?

  3. Bagaimana cara menguji apakah suatu variabel adalah angka di Bash?

  1. Linux bash:Penetapan variabel berganda

  2. Alias ​​​​dengan variabel di bash

  3. Bagaimana cara menghapus variabel readonly di bash?

  1. Kurung Tunggal Dalam Penugasan Variabel Bash?

  2. Karakter yang diizinkan dalam nama variabel lingkungan Linux

  3. bash - pencocokan variabel case-insensitive