Warum müssen doppelte Anführungszeichen dafür sorgen, dass String als Funktion ausgeführt wird?

382
scrapy

Eine einfache Funktion empfängt zwei Argumente und fügt andsie hinzu. Anschließend werden sie gedruckt.

function myprint(){ echo "$1 and $2";} 

Es klappt.

myprint xx yy xx and yy 

Es ist eine Zeichenfolge, bash parse es separat.

"myprint xx yy" bash: myprint xx yy: command not found 

Warum müssen doppelte Anführungszeichen dafür sorgen, dass String als Funktion ausgeführt wird?

""myprint xx yy"" xx and yy 
-1

1 Antwort auf die Frage

3
Kamil Maciorowski

Ihre "doppelten Anführungszeichen" sind tatsächlich nicht geschachtelt. Zweimal wird ein doppeltes Zitat geöffnet und sofort geschlossen.

""myprint xx yy"" ^^ this is one pair of quotes with empty content ^^ this is anther pair with empty content ^^^^^^^^^^^^^^^ this is not quoted at all 

In der Tat ""myprintheißt der Befehl: Die leere Zeichenfolge, die mit "myprint" verkettet ist, wird in die myprintFunktion aufgelöst. und das letzte Argument ist die Zeichenfolge "yy", die mit der leeren Zeichenfolge verkettet ist.

Sie werden also nicht in Anführungszeichen gesetzt myprint xx yy. Der gesamte ursprüngliche Befehl verhält sich so.