Wenn eine Befehlsersetzung durchgeführt wird, kann die Worttrennung zweimal auftreten, einmal innerhalb der Befehlsersetzung und einmal außerhalb. Bei Anführungszeichen wird das Teilen von Wörtern für beides verhindert. Sie müssen jedoch die Befehlsersetzung angeben, um zu verhindern, dass das Ergebnis in diesem Fall aufgeteilt wird.
Drei Beispiele:
set -- "a b c"
echo $#
1
Wort Spaltung durch die Anführungszeichen in diesem Fall verhindert wird.
set -- $(echo "a b c")
echo $#
3
Im zweiten Fall wird $(...)
durch a b c
Aber jetzt ersetzt, ist dies nicht mehr zitiert, so dass es noch einmal unter Wort Spaltung ist.
Wenn wir uns bewegen, die Anführungszeichen zu außerhalb des Befehls Substitution, das Ergebnis von echo
erneut als ein einziger Eintrag interpretiert wird:
set -- "$(echo a b c)"
echo $#
Dieses auch als
geschrieben werden konnte
set -- "$(echo "a b c")"
echo $#
In jedem Fall verhindern die äußeren Anführungszeichen die äußere Worttrennung. Ob die Wortaufteilung im Inneren erfolgt, ist hier nicht relevant.
Das Ergebnis der Befehlssubstitution wird wortaufgeteilt weil es keine Anführungszeichen gibt, um es zu verhindern. 'für dich in" $ (echo a b c) "; echo $ u; erledigt 'würde das gleiche Ergebnis wie der zweite Fall ergeben. – alvits
Großartig, danke. Macht Sinn. – michael