Was bedeutet das Sternchen „*“ in einer Unix-PATH-Umgebungsvariable?

Was bedeutet das Sternchen „*“ in einer Unix-PATH-Umgebungsvariable?

Beispiel:

# echo $PATH
/home/admin*:*/bin

Ich nehme an, dass es sich um eine Art Platzhalter handelt, aber ist es eine Ebene tief oder mehr?

Werden beispielsweise */binnur Elemente in übereinstimmen usr/binoder werden auch tiefer liegende Elemente in übereinstimmen usr/local/bin and /home/admin/bin? Und wird alles darunter /home/admin*übereinstimmen , auch auf mehreren Ebenen?/home/administrator

Antwort1

Was bedeutet ein Sternchen (*) in einem Unix-$PATH?

# echo $PATH
/home/admin*:*/bin

Das bedeutet, dass Sie einen Invalidenstatus haben $PATH.

$PATHunterstützt keine Platzhalter.

Antwort2

Dasandere AntwortIhre Behauptung $PATHist ungültig, aber ich stimme nicht zu.

Das liegt daran, dass bashes zumindest in keine Fehler verursacht – weder, wenn Sie es festlegen, noch wenn die Shell versucht, einen Befehl über $PATH aufzulösen.

In $PATH bedeutet ein Asterisk einwörtlich *(Sternchen).

Das heißt, es gibtNEINEs wird eine Platzhaltererweiterung durchgeführt und tatsächlich wird das wörtliche Verzeichnis geprüft /home/admin*, das nicht existiert und deshalb übersprungen wird. Außerdem wird geprüft */bin, was ebenfalls ignoriert wird.


DudürfenErstellen Sie Verzeichnisse mit einem Literal *darin (aber ... aber ...Warum?).
Und wenn das gemacht wird, dannWilleschau dort; z.B. im '*/bin'Pfad

Das hier würde also tatsächlich mit Ihrem angegebenen $PATH-Wert funktionieren:

cd /
mkdir \*
mkdir \*/bin
echo 'echo Hello from \"star\"/bin' > \*/bin/asterisk.bash
chmod 744 \*/bin/asterisk.bash

asterisk.bash

(Wenn Sie es in einem lokalen Verzeichnis statt im Root-Verzeichnis ausprobieren möchten, geben Sie einfach nicht cdin /)
(Nichtdass ich empfehle, dies zu Hause zu tun. Mach es bei einem Freund zu Hause :-)

Aber da Sie es wahrscheinlich sowieso getan haben - nun, um die Lächerlichkeit loszuwerden, sollten die folgenden drei Befehle es tun.
(NB: Ich binnichtVerwenden Sie es rm -rnur für den Fall, dass Sie einen Tippfehler haben oder die Shell, in der Sie sich befinden, die Dinge anders interpretiert.)

rm \*/bin/asterisk.sh
rmdir \*/bin
rmdir \*

verwandte Informationen