bash_zeilenvorschub

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mato
Beiträge: 59
Registriert: 27.07.2010 22:18:03

bash_zeilenvorschub

Beitrag von mato » 27.02.2013 16:18:31

Hallo Debianer,

ich moechte aus einer Datei mit einer Tabelle die erste
Spalte ausdrucken.

Ich habe auf der kommandozeile getestet:

1. awk '{print $1 }' datei.txt Ergebnis: Wunderbar, so wie gewuenscht

2. A=$(awk '{print $1}' datei.txt
echo $A Ergebnis: Bei der Ausgabe sind die Daten ohne
jeglichen Zeilenvorschub, alles in einer Reihe.


Was ist da los?

Gruss aus dem Schwarzen Wald,
Mato

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: bash_zeilenvorschub

Beitrag von Cae » 27.02.2013 16:41:39

mato hat geschrieben:echo $A
echo "$A".

Gruss Cae
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

mato
Beiträge: 59
Registriert: 27.07.2010 22:18:03

Re: bash_zeilenvorschub

Beitrag von mato » 08.03.2013 12:47:13

Hallo Cae,

gute Idee, das wars.
Kannst Du mir noch in wenigen Worten erklaeren warum.
Mein schlaues Shell-Script Buch meint:

echo $VAR = Variablen auslesen
echo "$VAR" = Variablen-Interpolation

Variablen-Interpolation = Variablennamen werden durch ihre Werte ersetzt

Mir ist der Unterschied nicht so ganz klar.

Gruss aus dem schwarzen Wald,
Mato

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bash_zeilenvorschub

Beitrag von Meillo » 08.03.2013 13:12:19

mato hat geschrieben: Mein schlaues Shell-Script Buch meint:

echo $VAR = Variablen auslesen
echo "$VAR" = Variablen-Interpolation
So schlau scheint dein Buch nicht zu sein. :-P

Der Punkt ist, dass die Shell Whitespace als Worttrenner interpraetiert. Aus ``echo $VAR'' wird ``echo foo\n''. Danach teilt die Shell die Kommandozeile in Worte auf (tokenizing). Sie findet zwei Worte ``echo'' und ``foo'', den Whitespace am Ende der Zeile ignoriert sie. Wenn in deiner Variable ``a b'' drin steht, dann wuerde sie drei Worte finden ``echo'', ``a'', ``b''. Wenn du Anfuehrungszeichen setzst, dann ist der Whitespace innerhalb der Anfuehrungszeichen fuer die Shell unsichtbar und sie wuerde im ersten Fall die zwei Worte ``echo'' und ``foo\n'' finden und im zweiten Fall die zwei Worte ``echo'' und ``a b''. Siehe hierzu auch folgendes Beispiel:

Code: Alles auswählen

$ a='a    b'

$ echo $a
a b

$ echo "$a"
a    b

$ printf '%s\n' $a
a
b

$ printf '%s\n' "$a"
a    b
btw: Ein gutes Buch zu dem Thema waere das von Helmut Herold zu Unix-Shells.
Use ed once in a while!

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: bash_zeilenvorschub

Beitrag von Natureshadow » 08.03.2013 15:56:16

man cut

mato
Beiträge: 59
Registriert: 27.07.2010 22:18:03

Re: bash_zeilenvorschub

Beitrag von mato » 09.03.2013 11:47:56

Hallo Meillo,
So schlau scheint dein Buch nicht zu sein. :-P
Ich habe von Patrick Ditchen die "Shell-Script Programmierung"
und war bisher eigentlich ganz zufrieden.
btw: Ein gutes Buch zu dem Thema waere das von Helmut Herold zu Unix-Shells.
Ich werde es mir auf jeden Fall anschauen.

Gruss aus dem Schwarzen Wald,
Mato

btw: Eine weitere Antwort meinerseits kann dauern, ich muss wieder auf Reise

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bash_zeilenvorschub

Beitrag von Meillo » 09.03.2013 14:30:06

mato hat geschrieben:
So schlau scheint dein Buch nicht zu sein. :-P
Ich habe von Patrick Ditchen die "Shell-Script Programmierung"
und war bisher eigentlich ganz zufrieden.
Ich kenne dieses Buch nicht, aber wenn da sowas
echo $VAR = Variablen auslesen
echo "$VAR" = Variablen-Interpolation
so drin steht dann muss ich doch stark an der Qualitaet zweifeln. Mit der Variablen-Interpolation haben die Anfuehrungszeichen naemlich nichts zu tun. In beiden Faellen wird VAR interpoliert, die Anfuehrungszeichen beeinflussen das Tokenizing.
btw: Ein gutes Buch zu dem Thema waere das von Helmut Herold zu Unix-Shells.
Ich werde es mir auf jeden Fall anschauen.
Herold beschreibt wie die Shell funktioniert, nicht wie man damit programmiert, das sollte dir bewusst sein. Es koennte nicht das sein was du dir davon erhoffst.
Use ed once in a while!

Antworten