[beantwortet] "Hochkomma" oder "Dollar-Klammer" ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

[beantwortet] "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von heinz » 18.05.2008 17:08:22

Hallo zusammen,

ich hab jetzt schon ein paarmal gelesen, man soll in scripten lieber:

Code: Alles auswählen

$(befehl)
anstatt

Code: Alles auswählen

`befehl`
benutzen.

Gibt es dafür einen bestimmten Grund?
Ich kann igendwie keinen Unterschied zwischen den beiden varianten feststellen.

Schönen Sonntag noch,
gruß heinz
Zuletzt geändert von heinz am 18.05.2008 17:43:47, insgesamt 1-mal geändert.

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von KBDCALLS » 18.05.2008 17:12:58

Außer das die erste Variante leichter einzugeben ist, wüßte ich auch nicht.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von heinz » 18.05.2008 17:16:43

KBDCALLS hat geschrieben:Außer das die erste Variante leichter einzugeben ist, wüßte ich auch nicht.
Leichter einzugeben?
Das sind immerhin 2 Tasten mehr.. :wink:

gruß heinz (der des 10-Finger-Tippens nicht mächtig ist..)

Benutzeravatar
Kokopelli
Beiträge: 1156
Registriert: 08.01.2007 10:13:24
Lizenz eigener Beiträge: MIT Lizenz

Re: "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von Kokopelli » 18.05.2008 17:31:50

Naja, die Dollar-Variante ist leichter zu lesen (bzw schwieriger zu übersehen). Insb. bei verschachtelten Ausdrücken finde ich sie auch wesentlich weniger fehleranfällig.
man bash hat dazu zu sagen:

Code: Alles auswählen

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


              $(command)
       or
              ‘command‘

       Bash performs the expansion by executing command and replacing the command
       substitution  with  the  standard output of the command, with any trailing
       newlines deleted.  Embedded newlines are not  deleted,  but  they  may  be
       removed  during  word splitting.  The command substitution $(cat file) can
       be replaced by the equivalent but faster $(< file).

       When the old-style backquote  form  of  substitution  is  used,  backslash
       retains its literal meaning except when followed by $, ‘, or \.  The first
       backquote not preceded by a backslash terminates the command substitution.
       When  using  the  $(command)  form, all characters between the parentheses
       make up the command; none are treated specially.

       Command substitutions may be nested.  To nest when  using  the  backquoted
       form, escape the inner backquotes with backslashes.

       If the substitution appears within double quotes, word splitting and path‐
       name expansion are not performed on the results.
Ich denke insb. der Verzicht auf Escapes macht die $()-Version auch angenehmer zu nutzen.
Beste Grüße, Kokopelli
--------------------------
"One must marvel that Godzilla never died laughing" (William Tsutsui)

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von KBDCALLS » 18.05.2008 17:40:04

Zumal auf jeder Tastatur das Hochkomma meiner Meinung nach nicht gleich gut einzugeben ist.

Und das hier kann man leicht verwechseln.

' `
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von heinz » 18.05.2008 17:43:13

Vielen Dank für die Antworten!

Dachte schon ich müsste alle meine Scripte ändern...
Gerade nochmal Glück gehabt.. :lol:

gruß heinz

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von Meillo » 18.05.2008 17:47:33

Die Backticks sind portabler als Dollar-Klammer!

Man müsste mal in POSIX und der SUS genauer nachlesen ... jedenfalls werden die Backticks von wohl jeder Bourne-kompatiblen Shell unterstützt. Bei dem Dollar-Klammer-Konstrukt findet man sicher einige Shells, denen das fremd ist.
Use ed once in a while!

Methusalix

Re: [beantwortet] "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von Methusalix » 18.05.2008 18:18:35

Ich benutze auch lieber die Klammervariante. Die backticks spielen ja auch in
anderen Konstrukten (z.B. im Zusammenhang mit pipes) eine Rolle. Ich habe
mal mein Lehrbuch rausgekramt [1]:
`kommando`
$(kommando)
----------
Diese Zeichen führen zum Start von kommando, dessen
Ausgaben als Ergebnis geliefert werden. In diesen Anführungszeichen
stehende Variablen werden vor der Ausführung durch ihren Wert ersetzt.
Die Schreibweise $(kommando) kann mit der gleichen Bedeutung
in der Bourne-Again- und Korn-Shell alternativ verwendet werden.
Diese Art der Ersetzung wird auch Kommandoersetzung genannt.
Die verwendete Shell spielt eine Rolle. Das müßte jetzt irgendwie durch alle
Shells durchdekliniert werden.

[1] Quelle: Rainer Krienke, Unix-Shellprogrammierung 2., erw. Auflage 2001

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von heinz » 18.05.2008 18:28:07

Meillo hat geschrieben:Die Backticks sind portabler als Dollar-Klammer!
Das ist ein interessanter einwand!
Aber durch die benutzung von:

Code: Alles auswählen

#!/bin/bash
legt man man doch "fest" für welche Shell das ist.

Danke für die Denkanstösse!

gruß heinz

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von Meillo » 18.05.2008 19:42:07

heinz hat geschrieben:Aber durch die benutzung von:

Code: Alles auswählen

#!/bin/bash
legt man man doch "fest" für welche Shell das ist.
klar.

Aber es soll ja Leute geben, die ihre Scripte so portabel schreiben, dass sie mit allen POSIX-Shells funktionieren. Die `bash' gibt's nicht auf allen Systemen, eine POSIX-Shell aber auf allen Unixen. Deshalb schreiben diese Programmierer '#!/bin/sh' rein, und es ist egal worauf /bin/sh linkt.
(Besser aber /bin/bash angeben, wenn man nicht sicher ist, dass das Script auch wirklich auf allen Bourne-kompatiblen Shells läuft.)
Use ed once in a while!

Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

Re: [beantwortet] "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von Pischti » 21.05.2008 12:20:45

noch als einwurf: mit der $-Variante kann man mehrere aufrufe ineinander schachteln, was man mit den knüppeln ` nicht kann ...
gruss pischti
debian stable

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [beantwortet] "Hochkomma" oder "Dollar-Klammer" ?

Beitrag von Meillo » 21.05.2008 13:05:51

Pischti hat geschrieben:noch als einwurf: mit der $-Variante kann man mehrere aufrufe ineinander schachteln, was man mit den knüppeln ` nicht kann ...
doch, allerdings nur mit escapen
Use ed once in a while!

Antworten