shellskripte und Leerzeichen

J

junkmarv

Guest
Guten Morgen zusammen,
den gestrigen abend habe ich mit einem Phenomen verbracht, welches mir hier jemand vielleicht erklären kann:
Ich will ein logfile durchsuchen und mir nur die Zeilen des aktuellen Datums ausgeben lassen. Das Skript soll noch zwar noch mehr leisten,aber das ist nicht das Problem!
Jede Zeile des logfiles fängt mit Monatsnamen+Leerzeichen+Leerzeichen aufgefüllten Tag an.
Also setzt ich mir das Datum mit folgenden Befehl zusammen: date "+%b %e%".
In der Kommandozeile funktioniert der Befehl einwandfrei, sprich zwischen Monat und dem Tag sind die entsprechenden Leerzeichen - auch, wie aktuell, der Tag einstellig ist, befinden sich _zwei_ Leerzeichen dazwischen.
Verwende ich diesen Befehl in einem Skript(das zusammengesetzte Datum wird in einer Variable abgespeichert) wird grundsätzlich ein Leerzeichen gekürzt, sprich beim aktuellen Datum fehlt immer eines.
Experimente mit Zwischenspeichern in einer Datei, wobei in der Datei das Datum korrekt steht, und wieder einlesen, erzeugen das gleiche Phänomen. Versuche durch mehrere Variablen das Datum zusammenzusetzen schlugen ebenso fehl.
Aus irgendeinem Grund werden Leerzeichen rausgekürzt!
Ich habe das Problem umgangen und eine andere Lösung gefunden, trotzallem
möchte ich gerne wissen wieso?
Übersehe ich da was?
Für einen Hint wäre ich sehr dankbar!

Gruß
Matthias
 
Wenn du ein bischen Code gepostet haettest, muesste ich nicht raten:

Code:
DATUM=`date "+%b %e%"`
DATUM=$(date "+%b %e%")

So in etwa gehe ich mal davon aus, wirst du das machen, richtig ist:

Code:
DATUM="$(date '+%b +%e%')"
 
Hi LoRe,
erstmal danke für den zügigen Vorschlag!
sorry mit dem Code; richtig ich habe die zweite Version benutzt.
Ich habe Deinen Vorschlag ausprobiert und leider kommt nicht das gewünschte Ergbnis dabei heraus: ein Plus erscheint im Datum; auch einige Variationen davon brachten kein Erfolg. Es fehlt immer ein Leerzeichen...
Es kann doch nicht sein, dass die Kommandozeile sich anders verhält als im Skript?!?

Gruß
Matthias
 
LoRe schrieb:
So in etwa gehe ich mal davon aus, wirst du das machen, richtig ist:
Code:
DATUM="$(date '+%b +%e%')"
Falsch. Es spielt hier keine Rolle, ob Du
Code:
foo=$(cmd)
oder
Code:
foo="$(cmd)"
verwendest. Entscheidend ist, dass bei Verwendung von $foo gequotet wird, nicht bei der Zuweisung.
 
bitte mal konkrete beispiele. ich kann das hier nicht nachvollziehen:
Code:
$ foo=$(date -r 1 "+%b %e")
$ echo $foo
Jan  1
-r 1 deswegen, weil der 10. nicht einstellig ist.
 
Hallo zusammen,
wie auch zuvor: In der Kommandozeile kein Problem, in einem Skript zu Weiterverarbeitung fehlt wieder das Leerzeichen!
Sorry...
Damit habe ich gearbeitet:

foo=$(date '%b %e')
#testausgabe
echo $foo #hier ist das datumsformat schon falsch
cat logfile|grep $foo >> tmpfile # deswegen gibt es auch keine treffer.
etc...

Gruß
Matthias
 
Du möchtest bitte, wie kili schon schrieb, die Variable bei Benutzung quotieren:
Code:
echo [color=red]"[/color]$foo[color=red]"[/color]   # Dann klappt's auch mit dem Nachbarn.
Das Verhalten, das TCM beschreibt, kann höchstens an einer anderen Shell liegen, da echo üblicherweise ein Shell-Builtin ist. Mit bash/sh unter FreeBSD erhalte ich:
Code:
> foo=$(date -r 1 "+%b %e")
> echo $foo
Jan 1
> echo "$foo"
Jan  1
Also genau das, was ich von echo auch erwarten würde.
 
Hallo zusammen,
sorry, ich habe soviel ausprobiert, da hatte ich vollkommen übersehen, aber es klappt in der Form.
Was mich nur wirklich wundert ist, dieses unterschiedliche verhalten.
Vielen Dank für die Mühe.

Gruß
Matthias
 
Hallo nochaml,
kurze Anmerkung zu 0815Chaot:
Wie Du siehst, hast Du zwei unterschiedliche Formate: Das letzt Ergebnis hat ein Leerzeichen mehr.

Gruß
Matthias
 
Huuhu,

yep, habe etwas voreilig geschlossen und den Zusammenhang aus den Augen verloren...

Danke
Matthias
 
Zurück
Oben