Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Verhalten der Bash in Bezug auf Variablen welches ich nicht verstehe

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.01.2004
    Beiträge
    75

    Verhalten der Bash in Bezug auf Variablen welches ich nicht verstehe

    Moin!

    Ich erfahre grad ein Verhalten der Bash, welches mir nicht in den Kopf will:

    $ echo -e "foo\nbar"
    foo
    bar
    $
    #
    $ foo="`echo -e \"foo\nbar\"`"
    $ echo "$foo"
    foo
    bar
    $
    Beides gibt - wie zu erwarten das Selbe aus.
    Hingegen ist mir Folgendes nicht verständlich:

    $ echo -e "\n\n\n\n"





    $
    #
    $ foo="`echo -e \"\n\n\n\n\"`"
    $ echo "$foo"

    $
    #
    $ echo -e "$foo"

    $
    Kann mir jemand erklären, warum aufeinander folgende newlines in einem echo-command scheinbar nicht in einer variablen gespeichert bzw. diese ausgegeben werden können?

    Vielen Dank im voraus,

    d@ten

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Deine innere echo-Ausgabe wird als leere Variable betrachtet. Der äußere echo kriegt ja keine Steuerzeichen mehr mit, hier sind sie in Linefeed umgewandelt. Damit ist die Variable leer (ist das Gleiche, als wenn Du 'echo<Return>' eingibst; wieviele <Return>'s das sind, ist egal):

    Code:
    jan@jack:~> echo "[`echo -e "\n\n\n\n"`]"
    []
    jan@jack:~> echo "[`echo -e "1\n\n\n\n"`]"
    [1]
    jan@jack:~> echo "[`echo -e "1\n2\n\n\n"`]"
    [1
    2]
    Du kannst Dir angucken, wie die Shell das auflöst:
    Code:
    jan@jack:~> bash
    jan@jack:~> set -x
    jan@jack:~> echo "[`echo -e "\n\n\n\n"`]"
    ++ echo -e '\n\n\n\n'
    + echo '[]'
    []
    jan@jack:~> exit
    Jan

  3. #3
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    kA obs einen eleganteren Weg gibt:
    Code:
    foo="`echo -e 'x\n\n\n\n\n\n\nx'`"
    foo="${foo:1:$((${#foo}-2))}"
    echo "$foo"
    http://tldp.org/LDP/abs/html/string-manipulation.html
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  4. #4
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Ah, das scheint auch zu funktionieren (beides nur mit bash getestet):
    Code:
    foo='
    
    
    
    
    '
    echo "$foo"
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  5. #5
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Code:
    foo=$'\n\n\n\n\n'

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •