OT: tab,newline etc. in shellscripts
Moin, leider habe ich immer noch nicht gerafft, wie ich sowas wie tab und newline im Shellscript möglichst einfach einbaue. Beispiel: Ich möchte string1 einen text zuweisen, der einen Zeilenumbruch beinhaltet: string1="Textteil1"????"Textteil2" Als Ausgabe von echo $string1 soll dann das rauskommen: Textteil1 Textteil2 Was muß ich dann für ????? einsetzen? Danke Gruß Peter
On 9 Aug 2001, at 10:28, Peter Bossy wrote:
Moin,
leider habe ich immer noch nicht gerafft, wie ich sowas wie tab und newline im Shellscript möglichst einfach einbaue. Beispiel: Ich möchte string1 einen text zuweisen, der einen Zeilenumbruch beinhaltet: string1="Textteil1"????"Textteil2" Als Ausgabe von echo $string1 soll dann das rauskommen:
Textteil1 Textteil2
Was muß ich dann für ????? einsetzen?
string1="Textteil1 Textteil2" Problem: Ausgabe nicht (!) mit echo $string1, das ergibt dann nämlich "Textteil1 Textteil2". Wenn du aber zur Ausgabe printf benutzt: printf "%s\n" $string1 kommt das gewünschte Ergebnis raus. (Getestet auf SuSE7.0) Andreas
On 9 Aug 2001, at 10:43, Andreas Kyek wrote:
On 9 Aug 2001, at 10:28, Peter Bossy wrote:
Moin,
leider habe ich immer noch nicht gerafft, wie ich sowas wie tab und newline im Shellscript möglichst einfach einbaue. Beispiel: Ich möchte string1 einen text zuweisen, der einen Zeilenumbruch beinhaltet: string1="Textteil1"????"Textteil2" Als Ausgabe von echo $string1 soll dann das rauskommen:
Textteil1 Textteil2
Was muß ich dann für ????? einsetzen?
string1="Textteil1 Textteil2"
Problem: Ausgabe nicht (!) mit echo $string1, das ergibt dann nämlich "Textteil1 Textteil2". Wenn du aber zur Ausgabe printf benutzt: printf "%s\n" $string1
kommt das gewünschte Ergebnis raus. (Getestet auf SuSE7.0)
Alternative: akyek@pc105396:~ > y="asd\nasd2" akyek@pc105396:~ > echo $y asd\nasd2 akyek@pc105396:~ > echo -e $y asd asd2 akyek@pc105396:~ > Andreas
On Thursday, 9. August 2001 10:46, Andreas Kyek wrote:
On 9 Aug 2001, at 10:43, Andreas Kyek wrote:
On 9 Aug 2001, at 10:28, Peter Bossy wrote:
Moin,
leider habe ich immer noch nicht gerafft, wie ich sowas wie tab und newline im Shellscript möglichst einfach einbaue. Beispiel: Ich möchte string1 einen text zuweisen, der einen Zeilenumbruch beinhaltet: string1="Textteil1"????"Textteil2" Als Ausgabe von echo $string1 soll dann das rauskommen:
Textteil1 Textteil2
Was muß ich dann für ????? einsetzen?
string1="Textteil1 Textteil2"
Problem: Ausgabe nicht (!) mit echo $string1, das ergibt dann nämlich "Textteil1 Textteil2". Wenn du aber zur Ausgabe printf benutzt: printf "%s\n" $string1
kommt das gewünschte Ergebnis raus. (Getestet auf SuSE7.0)
Alternative:
akyek@pc105396:~ > y="asd\nasd2" akyek@pc105396:~ > echo $y asd\nasd2 akyek@pc105396:~ > echo -e $y asd asd2 akyek@pc105396:~ >
Das "-e" war´s also! Danke für Eure Hilfe Gruß Peter
Am 09 Aug 2001 11:07:11 +0200 schrieb Peter Bossy:
On Thursday, 9. August 2001 10:46, Andreas Kyek wrote:
On 9 Aug 2001, at 10:43, Andreas Kyek wrote:
On 9 Aug 2001, at 10:28, Peter Bossy wrote:
Moin,
leider habe ich immer noch nicht gerafft, wie ich sowas wie tab und newline im Shellscript möglichst einfach einbaue. Beispiel: Ich möchte string1 einen text zuweisen, der einen Zeilenumbruch beinhaltet: string1="Textteil1"????"Textteil2" Als Ausgabe von echo $string1 soll dann das rauskommen:
Textteil1 Textteil2
Was muß ich dann für ????? einsetzen?
string1="Textteil1 Textteil2"
Problem: Ausgabe nicht (!) mit echo $string1, das ergibt dann nämlich "Textteil1 Textteil2". Wenn du aber zur Ausgabe printf benutzt: printf "%s\n" $string1
kommt das gewünschte Ergebnis raus. (Getestet auf SuSE7.0)
Alternative:
akyek@pc105396:~ > y="asd\nasd2" akyek@pc105396:~ > echo $y asd\nasd2 akyek@pc105396:~ > echo -e $y asd asd2 akyek@pc105396:~ >
Das "-e" war´s also!
Danke für Eure Hilfe Leider ist alles was bisher vorgeschlagen wurde, nicht portabel. D.h. alles bisher vorgeschlagene hilft Dir das nur, solange Du Shells verwendest, die echo -e oder printf unterstützen (z.B. die Bash). Soll's auch auf anderen Systemen laufen, heisst's dann entweder die Bash o.ä. installieren, oder aber das obige Konstrukt generell vermeiden (In 2 echo's aufteilen, TAB als ' ' schreiben.).
Ralf
Sagt mal, Ihr beiden: Müssen diese Tonnen unnützer Quotings sein? Könnt Ihr nicht mal 5 Sekunden opfern, um sinnvoll zu kürzen? On Don, 09 Aug 2001 at 12:08 (+0200), Ralf Corsepius wrote:
Am 09 Aug 2001 11:07:11 +0200 schrieb Peter Bossy: [...]
Das "-e" war´s also!
Danke für Eure Hilfe Leider ist alles was bisher vorgeschlagen wurde, nicht portabel. D.h. alles bisher vorgeschlagene hilft Dir das nur, solange Du Shells verwendest, die echo -e oder printf unterstützen (z.B. die Bash). Soll's auch auf anderen Systemen laufen, heisst's dann entweder die Bash o.ä. installieren, oder aber das obige Konstrukt generell vermeiden (In 2 echo's aufteilen, TAB als ' ' schreiben.).
Bist Du sicher? Das -e mag nicht portabel sein, aber die meisten Unixe, die ich kennengelernt habe [1], können IIRC (ist schon ein wenig her) Steuerzeichen wie \t oder \n verarbeiten (meist sogar ohne extra Option und mit der Standard-Bourne-Shell). Das ist IIRC allgemeiner Standard. Jan [1] TOS SINIX / Reliant Unix HP-UX AIX SCO (?) Unixware (?)
Am 09 Aug 2001 23:46:59 +0200 schrieb Jan Trippler:
Sagt mal, Ihr beiden: Müssen diese Tonnen unnützer Quotings sein? Könnt Ihr nicht mal 5 Sekunden opfern, um sinnvoll zu kürzen?
On Don, 09 Aug 2001 at 12:08 (+0200), Ralf Corsepius wrote:
Am 09 Aug 2001 11:07:11 +0200 schrieb Peter Bossy: [...]
Das "-e" war´s also!
Danke für Eure Hilfe Leider ist alles was bisher vorgeschlagen wurde, nicht portabel. D.h. alles bisher vorgeschlagene hilft Dir das nur, solange Du Shells verwendest, die echo -e oder printf unterstützen (z.B. die Bash). Soll's auch auf anderen Systemen laufen, heisst's dann entweder die Bash o.ä. installieren, oder aber das obige Konstrukt generell vermeiden (In 2 echo's aufteilen, TAB als ' ' schreiben.).
Bist Du sicher? Ziemlich:
Aus SunOS4's man 1V echo: echo [ -n ] [ argument ... ]
Das -e mag nicht portabel sein, Das ist ganz sicher nicht portabel.
aber die meisten Unixe, die ich kennengelernt habe [1], können IIRC (ist schon ein wenig her) Steuerzeichen wie \t oder \n verarbeiten (meist sogar ohne extra Option und mit der Standard-Bourne-Shell). Das ist IIRC allgemeiner Standard.
Hierzu sagt SunOS5.7's man echo:
The C shell, the Korn shell, and the Bourne shell all have
echo built-in commands, which, by default, will be invoked
if the user calls echo without a full pathname. See
shell_builtins(1). sh 's echo , ksh 's echo , and
/usr/bin/echo understand the back-slashed escape characters,
except that sh 's echo does not understand \a as the alert
character. In addition, ksh 's echo , does not have a -n
option. sh 's
echo and /usr/bin/echo only have a -n option if the SYSV3
environment variable is set (see ENVIRONMENT below). If it
is, none of the backslashed characters mentioned above are
availible. csh 's echo and /usr/ucb/echo, on the other
hand, have a -n option, but do not understand the back-
slashed escape characters.
autoconf-2.52's autoconf.info sagt hierzu:
The simple `echo' is probably the most surprising source of
portability troubles. It is not possible to use `echo' portably
unless both options and escape sequences are omitted. New
applications which are not aiming at portability should use
`printf' instead of `echo'.
Don't expect any option. *Note Preset Output Variables::, `ECHO_N'
etc. for a means to simulate `-c'.
Do not use backslashes in the arguments, as there is no consensus
on their handling. On `echo '\n' | wc -l', the `sh' of Digital
Unix 4.0, MIPS RISC/OS 4.52, answer 2, but the Solaris' `sh', Bash
and Zsh (in `sh' emulation mode) report 1. Please note that the
problem is truly `echo': all the shells understand `'\n'' as the
string composed of a backslash and an `n'.
Because of these problems, do not pass a string containing
arbitrary characters to `echo'. For example, `echo "$foo"' is safe
if you know that FOO's value cannot contain backslashes and cannot
start with `-', but otherwise you should use a here-document like
this:
cat <
Peter Bossy wrote:
Moin,
leider habe ich immer noch nicht gerafft, wie ich sowas wie tab und newline im Shellscript möglichst einfach einbaue. Beispiel: Ich möchte string1 einen text zuweisen, der einen Zeilenumbruch beinhaltet: string1="Textteil1"????"Textteil2" Als Ausgabe von echo $string1 soll dann das rauskommen:
Textteil1 Textteil2
Was muß ich dann für ????? einsetzen?
Danke
Gruß
Peter
So geht's: roland@spock:~ > STRING1="Hallo\nHallo" roland@spock:~ > echo -e $STRING1 Hallo Hallo roland@spock:~ > Bye bye Roland
participants (5)
-
Andreas Kyek
-
Jan.Trippler@t-online.de
-
Peter Bossy
-
Ralf Corsepius
-
Roland Hilkenbach