In einem bash-script lese ich eine Datei deren Zeilen teilweise mit Leerstellen beginnen in einer while-Schleife. Mit dem Kmdo
if [ "`echo $ZEILE | grep -c '^ '`" -eq 0 ]
versuche ich zu Prüfen ob die Zeile mit einer Leerstelle beginnt. Ich erhalte aber immer das Ergebnis "0" auch bei den Zeilen, die mit Leerstellen beginnen.
was mache ich falsch?
PS: auch das Kmdo
echo "$ZEILE"
zeigt den Zeileninhalt ohne führende Leerzeichen. Führe ich dieses Kmdo in der Shell (bash) aus, in der ich das Script ausführe, werden die Leerzeichen angezeigt.
cygwin script führende Leerstellen in Variable erhalten
Re: cygwin script führende Leerstellen in Variable erhalten
Das Quoting ist verkehrt, $ZEILE mag zwar <space><space>test sein, aber weil's nicht gequotet ist, sieht die Shell echo<space><space><space>test, was zu echo<space>test reduziert wird. Das grep sieht nie mehrfache Leerzeichen am Anfang oder Ende (und auch nicht zwischendrin, zwischen den Argumenten von echo).
Unschoene Loesung:Schoen ist das aber trotzdem nicht, grep kennt -q:-- allerdings ist dann die Logik invertiert, daher muss man die RegEx umschreiben. Den extra-fork() fuer grep kann man sich auch ueber Shell-Builtins sparen, z.B.oder vermutlich auch per ${##%%}-Voodoo.
Willkommen im Forum!
Gruss Cae
--Edit: Eben stand das PS: noch nicht da. Vermutlich liest du per read ein, das frisst aber Vorkommen von $IFS am Zeilenanfang. Loesung: $IFS leeren:Also in deinem Fall vermutlich
Unschoene Loesung:
Code: Alles auswählen
if [ "`echo "$ZEILE" | grep -c '^ '`" -eq 0 ]
Code: Alles auswählen
if echo "$ZEILE" | grep -q '^[^ ]'; then
Code: Alles auswählen
case "$ZEILE" in
" "*)
# if-Teil
;;
*)
#else-Teil
;;
esac
Willkommen im Forum!
Gruss Cae
--Edit: Eben stand das PS: noch nicht da. Vermutlich liest du per read ein, das frisst aber Vorkommen von $IFS am Zeilenanfang. Loesung: $IFS leeren:
Code: Alles auswählen
$ read foo
as df
$ echo "$foo"
as df
$ IFS='' read foo
as df
$ echo "$foo"
as df
Code: Alles auswählen
while IFS='' read ZEILE; do
...
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: cygwin script führende Leerstellen in Variable erhalten
Hallo Cae danke für Deine Antwort.
Ich habe Deine Vorschläge probiert aber es hat sich nichts verändert. Es scheint ein grundsätzliches Problem zu sein. Im Script sehe ich nie ein Leerzeichen am Zeilenbeginn egal ob ich echo $ZEILE verwende oder echo "$ZEILE". In der Shell (außerhalb des scripts) macht das sehr wohl einen Unterschied,
und es werden im 2. Fall die Leerzeichen angezeigt.
Ich habe Deine Vorschläge probiert aber es hat sich nichts verändert. Es scheint ein grundsätzliches Problem zu sein. Im Script sehe ich nie ein Leerzeichen am Zeilenbeginn egal ob ich echo $ZEILE verwende oder echo "$ZEILE". In der Shell (außerhalb des scripts) macht das sehr wohl einen Unterschied,
und es werden im 2. Fall die Leerzeichen angezeigt.
Re: cygwin script führende Leerstellen in Variable erhalten
Das Problem ist geköst!
Ich habe IFS='' an den Anfang des Scripts gesetzt und nun funktioniert die Abfrage auf führende Leerstellen.
Nochmals Danke für die Hilfe
Ich habe IFS='' an den Anfang des Scripts gesetzt und nun funktioniert die Abfrage auf führende Leerstellen.
Nochmals Danke für die Hilfe