Kirjoittaja Aihe: kun muuttujan nimi on muuttuja (dash/bash) [Ratkaistu]  (Luettu 2442 kertaa)

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Yritän käyttää scrptin mukaan nimettyä muuttujaa, jonka arvoa en halua välittää komentorivillä:

Koodia: [Valitse]
#!/bin/dash
ev=$(basename $0  | tr '[a-z]-' '[A-Z]_')_NOISY
eval "noisy=\$$ev"
jobs="$@"
# jatkuu...

Mutta vaikka mitä yritän, eval ei anna arvoa muuttujalle noisy. Olen kokeilut vaikka mitä esimerkkejä joita netistä löydän, mutta en vaan onnistu edes bashissä. Mikä on vikana?
« Viimeksi muokattu: 22.06.21 - klo:16.27 kirjoittanut AimoE »

SuperOscar

  • Käyttäjä
  • Viestejä: 4063
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: kun muuttujan nimi on muuttuja (dash/bash)
« Vastaus #1 : 22.06.21 - klo:15.59 »
Liikaa lainauksia, pitäisi olla:

Koodia: [Valitse]
eval "noisy=\$ev"
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: kun muuttujan nimi on muuttuja (dash/bash)
« Vastaus #2 : 22.06.21 - klo:16.26 »
Näinpä. Sitä se helle teettää.

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: kun muuttujan nimi on muuttuja (dash/bash) [Ratkaistu]
« Vastaus #3 : 23.06.21 - klo:12.42 »
Hyväksyinkin väärän vastauksen. Testaan asetetusta muuttujasta vain se, onko se asetettu eli [ -n "$noisy" ], joten en huomannut että arvo asettui väärin.

Vika likin siinä että olin asettanut muuttujan ilman export-komentoa. Nyt kun asetan muuttujan exportilla, niin ensimmäinen muoto onkin oikein.

Koodia: [Valitse]
#!/bin/dash
ev=$(basename $0  | tr '[a-z]-' '[A-Z]_')_NOISY
eval "noisy=\$$ev"
jobs="$@"
# jatkuu...

Scriptissäni on nyt

Koodia: [Valitse]
ev () {
    ev=$(basename $0)_$1
    eval $1=\$$(printf $ev | tr '[a-z]-' '[A-Z]_')
}