bash frage

mark05

Well-Known Member
hi

mal ne frage an die bash gurus

ich habe hier ein paar varablen in der form

TEST_USER=bla
TEST_PASS=blubber
TEST_DB=mysql
OTHER_USER=user
OTHER_PASS=pass
OTHER_DB=nix


nun moechte ich via for schleife diese varablen aus lesen

Code:
for d in 'TEST OTHER' ; do
  echo "$d_USER"
done

leider wirft er nicht den inhalt aus den ich gerne haette
in perl wuerde ich ja ne refrenz bauen um an den inhalt zu kommen
wie geht das in bash ?

holger
 
So gehts:
Code:
#!/usr/local/bin/bash

TEST_USER=bla
TEST_PASS=blubber
TEST_DB=mysql
OTHER_USER=user
OTHER_PASS=pass
OTHER_DB=nix

for d in TEST OTHER ; do
  eval echo "\${${d}_USER}"
done
 
Neben der genannten Lösung zwei Hinweise: Mit Anführungszeichen wird das 'TEST OTHER' als ein Argument übergeben, du willst es aber als separate Argumente haben, daher die Anführungszeichen bei sowas weglassen.
Und eval solltest du dir unabhängig hiervon angucken zur sh-Programmierung. Man muss mit der Benutzung aufpassen, denn Code wird sehr schnell sehr unübersichtlich, aber es ist enorm mächtig - du kannst damit z.B. sowas wie Funktionspointer realisieren.

Und noch Kleinkariertheit hinterher (da das hier ein BSD-Forum ist): Bitte schreib posix-sh-Code, keinen bash-Code. BSDs leiden schon jetzt unter fehlender Portabilität von vielem Linux-Zeug, v.a. eben bash-Skripte (und auch z.B. die dash wird dir das nicht verzeihen).
Wenn man sich dran gewöhnt hat, kommt man gut ohne die bash-Eigenheiten aus und schreibt dann sehr portablen Code.
 
hi

erstmal grundsaetzlich danke das problem ist an sich geloest , jedoch mit dem
ergebinns das ich den ganzen part worum es geht in perl neu bauen werde.

holger
 
Code:
TEST_USER=bla
TEST_PASS=blubber
TEST_DB=mysql
OTHER_USER=user
OTHER_PASS=pass
OTHER_DB=nix

for I in `set`
do
        echo $I | egrep "^(TEST|OTHER)"
done
 
Zurück
Oben