Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
HelsAett
- Beiträge: 749
- Registriert: 18.03.2003 18:25:00
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
# 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?
-
Meillo
- Moderator
- Beiträge: 9237
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
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!
-
habakug
- Moderator
- Beiträge: 4314
- Registriert: 23.10.2004 13:08:41
- Lizenz eigener Beiträge: MIT Lizenz
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
-
Meillo
- Moderator
- Beiträge: 9237
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
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
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")