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