例子:
# 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 \*