unix PATH 环境变量中的星号“*”是什么意思?

unix PATH 环境变量中的星号“*”是什么意思?

例子:

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

我认为它是某种通配符,但它的深度是一层还是多层?

例如,是否*/bin仅匹配中的项目usr/bin,还是也匹配中的更深层项目usr/local/bin and /home/admin/bin?是否/home/admin*匹配/home/administrator其下的所有内容,以及在多个级别?

答案1

unix $PATH 中的星号(*)是什么意思?

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

这意味着你有一个无效的$PATH

$PATH不支持通配符。

答案2

其他答案您的陈述$PATH无效,但我不同意。

这是因为,bash至少,它不会导致任何错误 - 无论是当您设置它时,还是当 shell 尝试通过 $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万一输入错误或者你所在的 shell 解释不同。)

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

相关内容