2010-04-17 8 views
63

Entweder verpasste ich etwas Backlash oder Backlashing scheint nicht mit zu viel Programmierer-Quote-Looping arbeiten.Wie Bash Backticks richtig verschachteln

$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``" 

hello1-hello2-hello3-echo hello4 

Gesucht

hello1-hello2-hello3-hello4-hello5-hello6-... 
+0

Die Frage sollte wahrscheinlich lesen "wie Bash Backticks rekursiv zu verwenden". Das sollte den Googlern da draußen helfen. –

+0

Was versuchst du zu tun? das hat überhaupt keine Bedeutung. – ghostdog74

+1

@joey, titel geändert, ure willkommen: D – Stormenet

Antwort

103

Verwenden $(commands) statt:

$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))" 
hello1-hello2-hello3-hello4 

$(commands) macht das gleiche wie Backticks, aber Sie können sie verschachteln.

Sie auch in Bash Bereich Erweiterungen interessieren:

echo hello{1..10} 
hello1 hello2 hello3 hello4 hello5 hello6 hello7 hello8 hello9 hello10 
+0

+1 wie die {1..10}. Begrenzen Sie es mit Array? ZSH kann "$ {$ (Datum) [2,4]}". Warum nicht: "echo $ {echo hallo1 - $ (echo hallo2) [1]}"? – hhh

7

Es ist viel einfacher, wenn Sie die Verwendung bash $(cmd)command substitution syntax, die viel freundlicher ist verschachtelt werden:

$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))" 
hello1-hello2-hello3-hello4 
+4

Dies ist nicht beschränkt auf * bash *. Es ist in allen Shells verfügbar, die POSIX 1003.1 ("POSIX-Shells") und den meisten von Bourne abgeleiteten Shells (* ksh *, * ash *, * dash *, * bash *, * zsh * usw.) entsprechen tatsächliche Bourne-Shell (dh http://heirloom.sourceforge.net/sh.html). –

22

, wenn Sie darauf bestehen, Backticks zu verwenden, werden folgende könnte

getan
$ echo "hello1-`echo hello2-\`echo hello3-\\\`echo hello4\\\`\``" 

Sie Schrägstriche setzen, \\ \\\\ \\\\\\\\ von 2x und so auf, es ist nur sehr hässlich, verwenden Sie $(commands) als andere vorgeschlagen.

+0

Das beantwortet tatsächlich die Frage – Justas

8

Jedes Mal, wenn Sie einen Befehl verwenden command substitution auswerten möchten:

$(command) 

Jedes Mal, wenn Sie einen arithmetischen Ausdruck Verwendung expression substitution auswerten möchten:

$((expr)) 

können verschachtelt diese wie folgt aus:

Angenommen, file1.txt ist 30 Zeilen lang und file2.txt ist 10 Zeilen lang, dann können Sie einen Ausdruck wie diesen auswerten:

die Ausgabe 20 (der Unterschied in der Anzahl der Zeilen zwischen zwei Dateien).

Verwandte Themen