Hallo,
Tim Landscheidt <
t...@tim-landscheidt.de> wrote:
> Uwe Premer <
m...@uwe-premer.de> wrote:
>> Für ein Script benötige ich folgende Ausgabe:
>> echo "X-Face:
>> Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|
>> b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-
>> Mony`'q+d3:K@O3e-n~,x3"
>> (alles in einer Zeile!)
Die bash macht die von der csg her stammende (und von fast niemand bei
der bash verwendete) "History-Expansion" (und dann teilweise Fehler
beim quoting des "!"). An der Stelle ist die bash eine eher unglueckliche
Wahl ...
>> Eigentlich ganz easy: der in " eingeschlossene Text soll angezeigt
>> werden.
Wenn der anzuzeigende Text selbst ein '"' enthaelt, geht das in die Hose ...
>> Allerdings ergibt sich dieser Fehler in der bash:
>> ~> echo "X-Face:
>> Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|
>> b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-
>> Mony`'q+d3:K@O3e-n~,x3"
>> bash: !: event not found
Die shell stolpert ueber ihre eigene (eigentlich voellig ueberfluessige)
Faehigkeit zur "History-Expansion" ...
>> Wie kann ich exakt diesen X-Face-Text per echo in der bash anzeigen
>> lassen?
> Beispielsweise mit einfachen Anführungszeichen:
Was schief geht, wenn der auszugebende Text selbst wieder ein "single Quote"
enthaelt (was hier der Fall ist): Der auszugebende String wird dann ver-
faelscht oder bei ungerader Anzahl bpn Single-Quotes in der Zeichenkette
kann es ggfs. sogar zu Syntax-Fehlern kommen, die die shell meldet ...
Wenn es in einem script verwendet werden soll, kann man ggfs. mit der
"here document" Methode arbeiten:
cat <<EOF
X-Face: Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'\''l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-Mony`'\''q+d3:K@O3e-n~,x3
EOF
Wobei allerdings (obwohl das IMHO nicht passieren sollte) nicht nur die
bash sondern z.B. auch die dash den Text im "here document" noch einmal
parsed, was dann wieder zu einem Fehler fuehrt ... :-(
Eine funktionierende Methode (fuer bash, ksh und alle Posix-shells)
waere es wohl, die auszugebende Zeichenkette in eine separate Datei
zu schreiben, die man dann z.B. mit cat ausgibt (aber auch etwas wie
echo "$(<face.txt)"
wuerde funktionieren, wenn face.txt den auszugebenden String enthaelt).
> Quoting in Shell-Scripts ist normalerweise die letzte Motivation,
> Perl zu lernen :-).
Man muss bei der shell nur wissen, was und vor allem *wie* man etwas
tut. Und am besten macht man des oefteren (gerade was scripts angeht)
im die bash einen Bogen (deren Besonderheiten fuehren nur allzu oft
zu unportablen, in Faellen wie diesem schlimmstenfalls zu disfunk-
tionalen scripts). Und perl ist auch nicht so sehr der Weisheit letzter
Schluss, wie es die Fans dieser Sprache gern haetten ...).
Tschuess,
Juergen Ilse (
jue...@usenet-verwaltung.de)
--
Ein Domainname ist nur ein Name, nicht mehr und nicht weniger.
Wer mehr hineininterpretiert, hat das Domain-Name-System nicht
verstanden.