PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Substitution von Variablen? Hilfe!



sutterp
25-04-2001, 13:55
Guten Tag,

Ich bin noch relativ neu mit Linux, habe aber gedacht ich haette es begriffen, aber ach!

Installation:
Suse Linux V7.0

sopac2:~ # bash -version
GNU bash, version 2.04.0(1)-release (i386-suse-linux)
Copyright 1999 Free Software Foundation, Inc.

Problem:

Ich moechte an eine Script Dateinamen als Parameter uebergeben, die eine Wildcard enthalten koennen. Das behandeln der Wildcard soll in der Script vorgenommen werden.

z.B. Script "Wert*.log"

Bei der Uebergabe der Parameter findet jedoch manchmal eine Umwandlung statt.

Beispiel:

sopac2:~ # x="Ein Wert fuer x*"
sopac2:~ # echo $x
Ein Wert fuer x*

aber

sopac2:~ # x="/sopac2/log/backup*.err"
sopac2:~ # echo $x
/sopac2/log/backup-2001-01-24.err /sopac2/log/backup-2001-04-24.err /sopac2/log/backup-2001-04-25.err

sopac2:~ # x='sopac2/log/backup*.err' hilft auch nichts.

Die Umwandlung findet nur statt, wenn eine Datei mit dem Namen des in der Variablen gespeicherten Wertes existiert.

Frage:

Wie kann ich diese Parameter Substitution verhindern, oder anders gesagt, wie mach ichs richtig?

Vielen Dank fuer Ihre Hilfe.

Peter Sutter
------------

[ 25. April 2001: Beitrag editiert von: Peter Sutter ]

thommy
25-04-2001, 14:36
Tja, die Arbeitsweise der Bash ist nicht ganz einfach zu verstehen ;)

Aber so gehts:

<pre>
# ls foo*
foo foobar
# x='foo*'
# echo "$x"
foo*
</pre>

Das Problem ist die Reihenfolge der Substitution. Bei der Variablenzuweisung entfernt die Bash bereits die Anführungszeichen; bei dem echo-Kommando wird aber die Kommandozeile erneut substituiert, womit der Stern aufgelöst wird.

Wenn Du die Auswertung vollends unterdrücken willst, musst Du die Shellvariable "noglob" setzen.

Thomas

sutterp
26-04-2001, 03:34
Thomas,

Vielen Dank fuer Deine Hilfe, klappt alles, der Trick ist, wenn man die Parameter unveraendert benuetzten will, muss man "$Parameter" und nicht $Parameter benuetzen.

Zusatzfrage:

Ich habe eine Variable x, welche einen Variablen Namen enthaelt, z.B.

x='MyVar'

Ich moechte jetzt MyVar einen Wert zuweisen. Die Substitution auf der linken Seite des Gleichheitszeichens klappt aber offensichtlich nicht.

z. B.

x='MyVar'
$x='Mein Wert'
bash: MyVar=Mein Wert: command not found
^^^^^^^^^^^^^^^
schaut fuer meine Begriffe richtig aus

Geht das ueberhaupt? In allen meinen Buechern steht nirgends etwas darueber.

Danke.

Peter

thommy
26-04-2001, 08:18
<pre>
# x='MyVar'
# echo $x
MyVar
# eval $x='Mein Wert'
# echo $MyVar
Mein Wert
</pre>

[hab ich aus der Linuxfibel ;)]

Thomas