Shell & Strings

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
HelsAett
Beiträge: 749
Registriert: 18.03.2003 18:25:00

Shell & Strings

Beitrag von HelsAett » 22.09.2014 09:40:25

Code: Alles auswählen

nodeleteNodeSite=`cat seitenpfade.txt`
nodeleteNodeMain=`cat mainpfade.txt`
##example
#/seite1/a
#/seite2/a/b
#/main3/c
#/main2/d

Code: Alles auswählen

echo "${nodeleteNodeSite}"
echo "${nodeleteNodeMain}"
# Ausgabe jeweils für sich, richtig untereinander und ohne Leerzeichen am Anfang

#hier beginnt mein Prob

Code: Alles auswählen

NOdeleteNodes="${nodeleteNodeSite}${nodeleteNodeMain}"
# Ausgabe
#/seite1/a
#/seite2/a/b/main3/c <-- umbruch funtzt nicht
# /main2/d

#not lösung für den fehlenden Umbruch aber die Leerzeichen bleiben erhalten.

Code: Alles auswählen

NOdeleteNodes="${nodeleteNodeSite}
${nodeleteNodeMain}"
hat jemand eine elegantere Lösung für den Umbruch
Tipps?

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

Re: Shell & Strings

Beitrag von Meillo » 24.09.2014 14:16:58

Ich habe mir das Problem angeschaut und damit rumgespielt. Leider kenne ich keine elegantere Loesung und leider habe ich gerade auch nicht die Zeit und Ruhe mich diesbezueglich in die Literatur (oder gar den Code) zu vertiefen.

Es scheint jedenfalls so zu sein, dass bei der Kommandosubstitution abschliessende Newline-Zeichen entfernt werden.

Waere das nicht der Fall, dann wuerde folgender Code eine zusaetzliche Leerzeile nach dem Datum ausgeben, denn `echo' selbst schreibt immer am Ende ein Newline:

Code: Alles auswählen

$ a="`date`"
$ echo "$a"
Wed Sep 24 13:52:55 CEST 2014
$
Use ed once in a while!

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Shell & Strings

Beitrag von habakug » 24.09.2014 14:37:23

Hallo!

Das ist so der Standard, siehe hier [1] Kapitel "2.6.3 Command Substitution":
The shell shall expand the command substitution by executing command in a subshell environment (see Shell Execution Environment) and replacing the command substitution (the text of command plus the enclosing "$()" or backquotes) with the standard output of the command, removing sequences of one or more <newline>s at the end of the substitution. Embedded <newline>s before the end of the output shall not be removed; however, they may be treated as field delimiters and eliminated during field splitting, depending on the value of IFS and quoting that is in effect.
Gruss, habakug

[1] http://pubs.opengroup.org/onlinepubs/00 ... hap02.html
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

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

Re: Shell & Strings

Beitrag von Meillo » 24.09.2014 16:08:24

Besten Dank fuer den Link.
Use ed once in a while!

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Shell & Strings

Beitrag von rendegast » 24.09.2014 17:35:50

HelsAett hat geschrieben: #hier beginnt mein Prob

Code: Alles auswählen

NOdeleteNodes="${nodeleteNodeSite}${nodeleteNodeMain}"
# Ausgabe
#/seite1/a
#/seite2/a/b/main3/c <-- umbruch funtzt nicht
# /main2/d

#not lösung für den fehlenden Umbruch aber die Leerzeichen bleiben erhalten.

Code: Alles auswählen

NOdeleteNodes="${nodeleteNodeSite}
${nodeleteNodeMain}"
Die "Notlösung" finde ich eigentlich elegant.
Alternative wäre eine Leerzeile am Anfang von nodeleteNodeMain resp. eine am Ende von nodeleteNodeSite,
wobei ich aber der Übersichtlichkeit/Fehlerresistenz halber die "Notlösung" bevorzugen würde.


Ich verwende es zwecks einfacherer nachträglicher Änderungen meist als

Code: Alles auswählen

NOdeleteNodes="
${nodeleteNodeSite}
${nodeleteNodeMain}
...
"
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten