Ich verstehe, dass die modernere $(...)
Befehlssubstitutionssyntax der altbasierten Syntax vorgezogen wird `
, da die Verschachtelung und die Escape-Syntax einfacher und weniger fehleranfällig sind.
Außerdem scheinen die meisten /bin/sh
Muscheln im modernen Gebrauch Folgendes zu unterstützen $(…)
:
- Bash
- ash (und damit BusyBox, also die meisten Embedded Linux)
- Strich
- FreeBSD / bin / sh
Und $(…)
wird durch IEEE 1003.1 spezifiziert.
Ich habe also zwei sehr verwandte Fragen:
- Gibt es einen Grund, `bei der Neuentwicklung von Shell-Skripten zu verwenden, es sei denn, Sie kennen ein bestimmtes altes System, auf dem das Skript ausgeführt werden muss?
- Gibt es irgendeinen Grund, UNIX-Programmierschülern nicht nur das Schreiben beizubringen
$(...)
und`
nur als veraltete Variante zu diskutieren , auf die sie wahrscheinlich stoßen werden, wenn sie die Shell-Skripte anderer Entwickler lesen (und die sie möglicherweise benötigen, wenn sie mit einem wirklich alten oder nicht standardmäßigen System arbeiten) aus irgendeinem Grund)?
shell
command-substitution
Michael Ekstrand
quelle
quelle
`...`
. Es ist nur für die Abwärtsportabilität mit der Bourne-Shell vorgesehen (wie die Bourne-Shell^
(genauso wie|
) für die Abwärtsportabilität mit der Thomson-Shell). Beachten Sie jedoch, dass(t)csh
dies nicht der Fall ist$(...)
(aber es hat auch keinen Sinn, sie zu verwenden oder zu unterrichten).$()
- Shift + 4,9, Shift + 0 - 5 Tastendrücke;Antworten:
Da häufig Back-Ticks verwendet werden, ist es sinnvoll, dieses syntaktische Konstrukt zu lehren.
Natürlich
$()
sollte die Ersetzung von Stilbefehlen als Standardstil (und standardkonformes Konstrukt) hervorgehoben werden.Warum sind Back-Ticks immer noch beliebt? Weil sie ein Zeichen beim Tippen speichern und das Auge weniger belasten.
quelle
$()
besser, aber Backticks sind einfacher und mehr KISS; könnte pavlovian OCDish Folge der allgemeinen Programmierung sein.`
ist Altrg + è, (umständlich Typen), während$
,(
,)
keinen Modifikator benötigen.Ich würde sie nicht zum Programmieren verwenden und die Verwendung der Backtick-Substitution in Shell-Skripten als veraltet zu lehren, ist in Ordnung (dies scheint der Konsens zu sein). Ich glaube jedoch nicht, dass sie von Natur aus böse sind, und (zumindest nach Ihrem durchschnittlichen Tutorial zur Linux-Befehlszeile) werden sie immer noch häufig in einfachen Snippets / Einzeilern verwendet, in denen sie wahrscheinlich nicht verschachtelt sind, und Dinge, die Sie tun werde ich nur einmal machen.
Siehe Befehlssubstitution: Backticks oder Dollarzeichen / Paren beiliegend? .
quelle
Ich vermeide die Verwendung des
$()
Konstrukts, da es nicht portabel ist - in der realen Welt. Sie haben vier Muscheln aufgelistet - es gibt viel mehr Variationen als diese (eine Größenordnung?). Versuchen Sie, Ihr Skript unter Solaris / bin / sh auszuführen, und sehen Sie, wie Sie vorgehen.Wann hören Sie auf, alte Systeme zu unterstützen? Kannst du niemals neue Wege beschreiten? Ich denke, Sie sollten Ihrem eigenen Urteil vertrauen, und wenn Sie einen klaren Vorteil des Neuen gegenüber dem Alten sehen können, dann versuchen Sie es ... dies ist keiner von ihnen (ich persönlich finde die Bacticks viel klarer - sie können es nicht sein verwechselt mit Shell-Variablensubstitution, was eine andere Sache ist)
quelle
/bin/sh
dies konform sein muss. Das Solaris/bin/sh
ist in der Tat sehr nicht konform - obwohl Solaris 9/10 / ... offiziell POSIX-konform ist. Das$()
ist nur ein Konstrukt, das es nicht versteht. Aber es gibt noch viel mehr, die es nicht versteht oder anders interpretiert. Der portable Weg, um ein Conformingsh
dazu zu bringen, auf dem von zurückgegebenen Pfad danach zu suchengetconf PATH
.