星號「*」在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 \*

相關內容