Что означает звездочка «*» в переменной среды PATH в Unix?

Что означает звездочка «*» в переменной среды PATH в Unix?

Пример:

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

Я предполагаю, что это своего рода джокер, но глубина его один уровень или много?

Например, будет ли */binсоответствовать только элементам в usr/binили также будет соответствовать более глубоким элементам в usr/local/bin and /home/admin/bin? И будет ли /home/admin*соответствовать /home/administratorи всему, что находится под ним, также на нескольких уровнях?

решение1

Что означает звездочка (*) в $PATH в UNIX?

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

Это значит, что у вас недействительный $PATH.

$PATHне поддерживает подстановочные знаки.

решение2

Этотдругой ответутверждает, что ваше $PATHутверждение недействительно, но я с этим не согласен.

Это потому, что, по bashкрайней мере, это не вызовет никаких ошибок — ни когда вы его устанавливаете, ни когда оболочка пытается разрешить команду через $PATH.

В $PATH звездочка означаетбуквальный *(звездочка).

То есть, естьНЕТВыполняется расширение подстановочных знаков, и на самом деле проверяется буквальный каталог /home/admin*, который не существует, поэтому он его пропускает, и проверяется */bin, который также игнорируется.


Тыможетсоздать каталоги с литералом *в них (но... но...почему?).
И, если сделано, то этоволяпосмотри там; например, на '*/bin'пути

Итак, это действительно будет работать с указанным вами значением $PATH:

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

asterisk.bash

(Если вы хотите попробовать это в локальном каталоге, а не в корневом, просто не делайте cdэтого /)
(Нетчто я рекомендую делать это дома. Сделайте это в гостях у друга :-)

Но поскольку вы, вероятно, все равно это сделали, ну, чтобы избавиться от нелепости, следующие три команды должны это сделать.
(Примечание: янет( Используется rm -rна всякий случай, если вы допустили опечатку или оболочка, в которой вы находитесь, интерпретирует данные по-другому.)

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

Связанный контент