shell variablen $(VARNAME) oder $VARNAME in configure.in



  • Hallo NG

    weil mir auffällt, das in configure.in alle Variablen folgendermaßen geschreiben sind

    $(VARNAME)

    wüßte ich gerne worin sich die shell Variante (bash)

    $VARNAME

    unterscheidet. Oder sollte man in der Shell auch die Klammerversion benutzten?

    Grüße
    BlackPepper



  • Also $() gibt es in sh gar nicht, in bash ruft $() eine Subshell auf und würde VARNAME ausführen (in sh geschieht das mit `VARNAME`). Auch ist mir in configure.in bisher nur $VARNAME untergekommen.
    Zeig doch mal so eine configure.in her in der $() benutzt wird.



  • Hallo Linux-Profi

    folgende Zeile stammt aus einem configure.in

    CPPFLAGS="$CPPFLAGS -I$(top_srcdir)/../linux-2.6.17.14-rtai3.4/include"
    

    Ich wüßte gerne welchen unterschied es in zwichen der Klammerversion $(VARNAME) und $VARNAME gibt. In der GNU Manpage hab ich dazu keine Aussage gefunden. Und in der Bash man page auch nicht.

    Gruß,
    BlackPepper



  • BlackPepper schrieb:

    Hallo Linux-Profi

    folgende Zeile stammt aus einem configure.in

    CPPFLAGS="$CPPFLAGS -I$(top_srcdir)/../linux-2.6.17.14-rtai3.4/include"
    

    Ich wüßte gerne welchen unterschied es in zwichen der Klammerversion $(VARNAME) und $VARNAME gibt. In der GNU Manpage hab ich dazu keine Aussage gefunden. Und in der Bash man page auch nicht.

    Gruß,
    BlackPepper

    Da wird ein Kommando aufgerufen namens top_srcdir, schau mal ob es zufällig eine Funktion gibt die so heißt. Es handelt sich dabei also nicht um eine Variable und die Ausgabe des Kommandos wird an der Stelle des Aufrufes in den String eingefügt.

    Du kannst ja mal folgendes ausprobieren:

    TEST_VAR="$(echo hello)"
    echo $TEST_VAR
    


  • Danke für die Info. Das $(VARNAME) VARNAME in einer Subshell ausführt wußte ich nicht.

    Schönes Wochenende,
    BlackPepper



  • man bash erklärt solche Sachen ausführlich, außerdem würde ich lieber ${VARNAME} anstall $VARNAME verwenden. Es gibt einige Vorteile von ${VARNAME} gegenüber $VARNAME:

    - du willst ABC_DEF ausgeben, ABC ist in CONFIG

    CONFIG="ABC_"
    echo $CONFIGDEF
    

    uupps, da wird nur was leeres ausgegeben, weil CONFIGDEF nicht definiert ist.

    CONFIG="ABC_"
    echo ${CONFIG}DEF
    

    da kommt ABC_DEF

    - Parameter expantion funktioniert auch nur mit {}

    CONFIG="abcd=23"
    echo ${CONFIG#abcd=}
    

    Ausgabe: 23



  • Die {}-Notation hat nur in den von dir beschriebenen Fällen einen Vorteil und das erste Beispiel ist ja "lachhaft", da kommt wohl kein Programmierer drauf, dass das gehen könnte.

    Was man immer tun sollte ist seine Variablen in "" einbetten, damit man keine Probleme mit Whitespace bekommt.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply