/ / Wie versteht der Bash-Alias ‚Äč‚Äč"$ @"? - Bash, Alias, Bash-Alias

Wie versteht der Bash-Alias ‚Äč‚Äč"$ @"? - Bash, Alias, Bash-Alias

Ich versuche einen Alias ‚Äč‚Äčzu schreiben, um zwei Dinge zu tun

$alias cde="cd "$@" && echo"

aber aus irgendeinem grund, wenn ich es mit nenne

$cde test
test

alles was passiert ist es echos test:

Es sieht so aus, als w√ľrde mein Argument nicht an die erste Anweisung √ľbergeben, sondern am Ende des gesamten Alias ‚Äč‚Äčverbraucht. Nach meinem Verst√§ndnis ist das $@ sollte alle Argumente konsumieren, damit es nie zum Echo kommt. Wie kann ich im ersten Teil ein Argument verwenden und nicht im zweiten?

Antworten:

5 f√ľr Antwort ‚ĄĖ 1

Alias ‚Äč‚Äčakzeptiert keine Argumente. Es ersetzt einfach eine Zeichenfolge durch die andere in Ihrer Befehlszeile. Es gibt keine separaten $@ f√ľr einen alias so "$@" wird hier nicht wie erwartet erweitert. Es wird so erweitert, als ob Sie direkt in der Befehlszeile Folgendes eingegeben h√§tten:

echo "$@"

(Dies zeigt nicht die exakte Wortteilung, aber es ist nicht der Punkt).

Eine Funktion ben√∂tigt jedoch Argumente und hat ihre eigenen $@. Es ist mir nicht klar, ob du deine wolltest echo um deinen Alias ‚Äč‚Äč"Argumente" auszudrucken. Wenn ja, w√ľrde ich dies anstelle eines Alias ‚Äč‚Äčtun:

cde() { cd "$@" ; echo "$@" ; }

Oder eher:

cde() { cd "$@" ; pwd ; }

Der Unterschied besteht darin, dass mehrere Argumente behandelt (wiedergegeben) und Pfade wie erweitert werden .. etc. auch -L und -P Optionen zu pwd k√∂nnte n√ľtzlich sein.

Wenn Sie √ľberschreiben m√∂chten cd dann brauchst du command um eine Endlosschleife zu vermeiden (die Funktion w√ľrde sich sonst selbst aufrufen):

cd() { command cd "$@" ; pwd ; }