2012-04-12 10 views
0

lese ich durch meine .bashrc und bemerkte die folgende

cd "[email protected]" && some_other_function 

Was genau macht das @ $ bedeuten?

+0

Siehe [UNIX-Shell-Programmierung spezielle Variablen] (http://stackoverflow.com/questions/3206312/unix-shell-programming-special-variables) –

Antwort

5

"[email protected]" wird zu einer Liste von in Anführungszeichen gesetzten Befehlszeilenparametern erweitert. Es ist subtil verschieden von "$*": gegebenen

set "a b" c d 

"$*" expandiert nach

"a b c d" 

während "[email protected]" zu

"a b" c d 

und $* (oder [email protected]) erweitert expandiert nach

a b c d 

das heißt, "$*" produziert eine einzelne Zeichenfolge, aber "[email protected]" repliziert die ursprüngliche Zitat, $* verliert das Zitat.

1

Von man bash:

@
erweitert sich auf die Positionsparameter, ausgehend von einem. Wenn die Erweiterung in doppelten Anführungszeichen auftritt, wird jeder Parameter in ein separates Wort erweitert. Das heißt, "$ @" entspricht "$ 1" "$ 2" ... Wenn die doppelzitierte Erweiterung innerhalb eines Wortes auftritt, wird die Erweiterung des ersten Parameters mit dem Anfangsteil des ursprünglichen Wortes und der Erweiterung verknüpft der letzte Parameter ist mit dem letzten Teil des ursprünglichen Wortes verbunden.

1

$ @ repräsentiert alle Argumente, die an das Skript übergeben werden.

Wenn Sie ein Skript aufrufen wie folgt benannt foo.sh:

$> foo.sh boo goo loo 

Die Ausgabe von $ @ wird dies:

> boo goo loo 
0

Wenn [email protected] leer ist, [email protected] nicht auf eine leere Zeichenfolge erweitern; Es ist vollständig entfernt. Also Ihr Test ist nicht:

[ -n "" ] 

sondern:

[ -n ] 

Jetzt -n ist kein Operator, sondern nur eine nicht leere Zeichenfolge, die immer als wahr prüft.