Dennis_B: Linux: kleiner aber feiner Unterschied? Bash-Variablen setzen.

Hallo Welt :)

ich gebe zu, ich habe mir ein Debian-Schinken gekauft und mir das komplette Grundwissen an "geackert" und verstehe mittlerweile sehr viel (die Mühe hat sich gelohnt!).

Doch eine Lücke muss noch gestopft werde da ich sonst keine Ruhe finde (habe im Netz irgendwie nichts wirkliches darüber gefunden).

Es geht um die Zuweisung eines Wertes an eine Variable, der Wert ist die Ausgabe eines Befehls.

Ich habe das bis Dato so gemacht:

VARIABLE=date +%g

Ausgabe mit echo:

echo $VARIABLE
10

Also der Wert stimmt und alles ist Prima.
Jetzt wiederum habe ich gelesen (im Netz) man soll die Ausgabe eines Befehls einer Variable so übergeben:

VARIABLE=$(befehl)

wo ist denn nun der Unterschied? Bei mir kommt es auf beides heraus... und was hat in diesem Fall das $ da zu suchen?

Und es gibt da noch so ein Fall wo ich keinen Unterschied fest stellen kann.
Man soll z.B. wenn man einer neuen Variable den Wert einer anderen übergibt und noch einen String drann setzt, das so formulieren:

BENUTZER=${USER}.debain   #ausgabe = dennis.debian

schön und gut, aber so geht das auch wunderbar und scheller denn man braucht keinen Griff über ALT-GR zu machen:

BENUTZER="$USER".debian   #ausgabe = dennis.debian

Ich denke mal es wird da bestimmt einen kleinen aber feinen Unterschied geben der mir bis jetzt noch nicht einleuchtet und hoffe auf eure Hilfe :)

Danke vielmals und lg!

  1. Hi!

    VARIABLE=date +%g
    Jetzt wiederum habe ich gelesen (im Netz) man soll die Ausgabe eines Befehls einer Variable so übergeben:
    VARIABLE=$(befehl)
    wo ist denn nun der Unterschied? Bei mir kommt es auf beides heraus... und was hat in diesem Fall das $ da zu suchen?

    man bash:

    Command Substitution
           Command substitution allows the output of a command to replace the command name.  There are two forms:

    $(command)
           or
                  'command'

    BENUTZER=${USER}.debain   #ausgabe = dennis.debian
    BENUTZER="$USER".debian   #ausgabe = dennis.debian
    Ich denke mal es wird da bestimmt einen kleinen aber feinen Unterschied geben der mir bis jetzt noch nicht einleuchtet und hoffe auf eure Hilfe :)

    Willst du mal versuchen, den selbst in der Doku zur bash zu finden?

    Lo!

    1. Hi!

      man bash:

      Command Substitution
             Command substitution allows the output of a command to replace the command name.  There are two forms:
      [...]

      In dem Abschnitt steht übrigens noch etwas mehr, auch zu den (geringen aber vorhandenen) Unterschieden zwischen beiden Varianten.

      Lo!

  2. Unterschiede:

    VARIABLE=date +%g

    vs.

    VARIABLE=$(befehl)

    Die Backquote-Form dient insbesondere der Kompatibilität mit älteren Bash-Versionen, das neuere $() läßt auch eine Schachtelung zu.

    BENUTZER=${USER}.debain   #ausgabe = dennis.debian

    vs.

    BENUTZER="$USER".debian   #ausgabe = dennis.debian

    Beides liest die Variable $USER aus. Die Form mit ${} dient einerseits der präzisen Referenzierung, hat aber noch zusätzliche Funktionalität:

    ${dateiname%.*} # liefert den Dateinamen ohne Suffix
    ${array[no]} # liest aus einem Array aus

    ...und noch einige weitere, die Du in der Doku findest.

    Gruß, LX

    --
    RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
  3. Hallo Dennis,

    ich gebe zu, ich habe mir ein Debian-Schinken gekauft und mir das komplette Grundwissen an "geackert" und verstehe mittlerweile sehr viel (die Mühe hat sich gelohnt!).

    ich weiß nicht, ob Dich der Debian-Schinken auf etwas ganz wichtiges zur bash hingewiesen hat: Debian fehlt die info-Dokumentation zu bash, siehe Archiv.
    Ja, das gilt leider immer noch.

    Ich empfehle daher, die info-Seiten aus Ubuntu-Quellen zu installieren und den Debian-Hinweisen zur Aktualisierung nicht zu folgen.

    Freundliche Grüße

    Vinzenz

    1. Tach,

      ich weiß nicht, ob Dich der Debian-Schinken auf etwas ganz wichtiges zur bash hingewiesen hat: Debian fehlt die info-Dokumentation zu bash, siehe Archiv.
      Ja, das gilt leider immer noch.

      hmm, wenigstens nach non-free hätte man es schieben können; aber wie sagte schon einer meiner liebsten Comic-Helden: "Never compromise. Not even in the face of Armageddon." - Rohrschach

      mfg
      Woodfighter