Entweder habe ich ein Spiel verpasst oder das Spiel scheint nicht mit zu viel Programmierer-Zitat-Schleife zu funktionieren.
$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``"
hello1-hello2-hello3-echo hello4
Gesucht
hello1-hello2-hello3-hello4-hello5-hello6-...
deprecated
daher verwendet$(cmd)
.Antworten:
Verwenden Sie
$(commands)
stattdessen:$(commands)
macht das gleiche wie Backticks, aber Sie können sie verschachteln.Sie könnten auch an Bash-Sortimentserweiterungen interessiert sein:
quelle
Wenn Sie darauf bestehen, Backticks zu verwenden, können Sie Folgendes tun
Sie müssen Backslashes setzen,
\\ \\\\ \\\\\\\\
um 2x und so weiter, es ist nur sehr hässlich, verwenden Sie$(commands)
wie andere vorgeschlagen.quelle
Jedes Mal, wenn Sie einen Befehl auswerten möchten, verwenden Sie
command substitution
:Wenn Sie einen arithmetischen Ausdruck auswerten möchten, verwenden Sie
expression substitution
:Sie können diese wie folgt verschachteln:
Angenommen, file1.txt ist 30 Zeilen lang und file2.txt ist 10 Zeilen lang, dann können Sie einen Ausdruck wie diesen auswerten:
das würde 20 ausgeben (der Unterschied in der Anzahl der Zeilen zwischen zwei Dateien).
quelle
Es ist viel einfacher, wenn Sie die
$(cmd)
Befehlssubstitutionssyntax von bash verwenden, die viel einfacher zu verschachteln ist:quelle
Manchmal kann das Verschachteln von Backticks durch
xargs
Pipes ersetzt werdenNachteil dieser Lösung sind:
Alle Argumente werden durch Leerzeichen getrennt (lösbar mit
tr
):Lassen Sie uns einen realen Anwendungsfall zeigen.
Die folgenden Befehle funktionieren in bash, aber nicht in tcsh (das Verschachteln von Backticks wird in tcsh nicht sehr gut gehandhabt).
Sie können durch ersetzt werden
quelle