echo
tut keine Substitution, es ist die Shell, die es tut. Es hängt von der Shell ab, die Sie verwenden, aber es scheint, dass Sie eine Shell der Familie der C-Shells verwenden. Shell erweitert Variablen in der Befehlszeile, so dass der erste Schritt ist, zu erzeugen:
[csh] echo param[xyz]
und dann die Schale hat Expansionsdatei übereinstimmen, aber da es keine Datei, die die Schal Antworten auf das Muster entspricht, ist, dass es keine Spiel. Die Nachricht ist irgendwie irreführend, da die Shell Sie daran erinnert, was "Befehl" betraf und nicht, dass der Befehl selbst fehlgeschlagen ist.
Im zweiten Versuch verhindert das Einschließen der Variablen in "
, dass die Shell eine andere Erweiterung ausführt, und die Shell startet den Befehl mit dem Argument, das nach der ersten Erweiterung erhalten wurde.
es eine weitere Prävention liegt vor, wenn Sie '
verwenden, wird die Schale nicht immer Variablen erweitern:
[csh] echo '$x'
$x
Siehe Dokumentation zu schälen und vor allem über Expansion.
Eine weitere Erfahrung zu überzeugen Sie mit einem nicht existierenden Befehl, um zu versuchen ist:
[csh] weirdo z*
weirdo: No match
, die als ein nicht existierenden Befehl ist anders:
[csh] weirdo
weirdo: Command not found.
Wenn Sie ein anderes Verhalten Shell würde verwenden würde, anders sein:
[bash] echo z*
z*
weil das Oberteil als Argument itse die Saite erzeugt Wenn die Dateiübereinstimmung nicht funktioniert.
mit:
[zsh] echo z*
zsh: no matches found: z*
das Verhalten c Schalen wesentlich ähnlich ist, aber die Nachricht viel mehr klar ist, scheiterte die Schale an Matching.
Danke, habe das Konzept :) –