PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash Variable: Wann welche Klammer?



gombi
22-09-2009, 19:41
Hallo!

Bin neu im Forum und wünsche Allen einen schönen Tag!

Da ich erst seit kurzem begonnen habe kleine Skripe in der bash zu bastel,
stellen sich mir einige Fragen.

Bitte nicht gleich steinigen falls ich was dummes frage!

Ich versteh die Anwendung verschieder Klammern(oder ") bei der Variablenvergabe nicht ganz.

zB:

Warum klappt dies mit eckiger Klammer?


Read=$[`grep AccountingBytesReadInInterval <$StateFile | cut -d " " -f2`]


Das aber nicht. Und ich muss die runde Klammer verwenden. Auch mit der Verwendung von backticks habe ich es nicht geschafft [ zu verwenden.


MonthlyTorTraffic=$(grep $Month <$TorTrafficDB | grep $Year | cut -d " " -f1 | awk '{sum+=$1}END{print sum}')


Und wann kann ich " verwenden?

Danke und
Lg
Gombi

zst
25-09-2009, 16:13
Hallo und WILLKOMMEN,

da sich niemand an eine Antwort wagt, versuche ich das mal.

Hast du das Ergebnis deines ersten Beispiels mal überprüft?
Für mich ist es eher fraglich, ob dies korrekt funktioniert, zumindest komme ich zu folgendem Ergebnis:



xy=$[`echo "HALLO"`]
echo $xy
0

xx=$(echo "Hallo")
echo $xx
Hallo



Für Befehlsersetzungen immer $() verwenden, [ ] nutze ich meist nur für test-Abfragen. Wenn dich Details interessieren, findest du im Netz unzählige Beispiele.
Im ersten Beispiel benutzt du die [ ] und innerhalb dieser die Ersetzungszeichen.
Wenn Du das $ und die [ ] entfernst, wird alles richtig funktionieren.



xy=`echo "HALLO"`
echo $xy
HALLO


Deine Variable "Read" ... denk dran, reservierte Wörter zu vermeiden.

Viele Grüße
zst

gombi
28-09-2009, 17:45
Danke für deine Antwort!


Ich verwende dieses Beispiel erfolgreich in einem Skript:

Read=$[`grep AccountingBytesReadInInterval <$StateFile | cut -d " " -f2`]

War verwundert über die unterschiedliche schreibweise, aber es funkt definitiv.
Und es funkt auch:


Read=`grep AccountingBytesReadInInterval <$StateFile | cut -d " " -f2`
oder

Read=$(grep AccountingBytesReadInInterval <$StateFile | cut -d " " -f2)

Aber das:
xy=$[`echo "HALLO"`]
geht nicht. Aber warum?

Danke nochmal,

LG
Gombi

BLUESCREEN3D
30-09-2009, 22:32
Bei $(Befehl) wird der Befehl ausgeführt und dessen Ausgabe an der Stelle eingesetzt. Zum Beispiel kann man so ein Verzeichnis mit dem aktuellen Datum erstellen: mkdir "$(date)"
Die Anführungszeichen sorgen dafür, dass Strings, die Whitespace (Leerzeichen usw.) enthalten, zusammengehalten werden.
Mit $((Ausdruck)) kann man rechnen: echo $((1+1))

`` ist eine alte Schreibweise für $()
$[] ist eine alte Schreibweise für $(())