Unix PATH 환경 변수에서 별표 "*"는 무엇을 의미합니까?

Unix PATH 환경 변수에서 별표 "*"는 무엇을 의미합니까?

예:

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

나는 그것이 일종의 와일드카드라고 생각하지만, 한 수준 깊이입니까, 아니면 여러 수준입니까?

예를 들어, */bin의 항목만 일치합니까 usr/bin, 아니면 의 더 깊은 항목도 일치합니까 usr/local/bin and /home/admin/bin? 그리고 그 아래의 모든 항목도 여러 수준에서 /home/admin*일치 합니까?/home/administrator

답변1

유닉스 $PATH에서 별표(*)는 무엇을 의미합니까?

# 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 \*

관련 정보