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