* 디렉토리 경로 끝

* 디렉토리 경로 끝

*Bash 스크립트에서 디렉터리 경로 끝에 있는 문자에 문제가 있습니다.

일부 아카이브가 충분히 오래되면 서버에서 자동으로 삭제하는 스크립트가 있습니다. 스크립트는 A 머신에 있고 B 머신에서 실행해야 합니다. 나는 ssh두 컴퓨터 모두 원격으로 액세스합니다(Sudo가 필요하지 않으며 일반 사용자만 가능합니다). 이 스크립트의 규칙 중 하나는 dirA/dirB/dirC/dirD/dirE*.

하지만 그 위치에는 아무것도 없기 dirE때문에 어떤 변수를 나타내는 것이라고 추측합니다 *. 이것이 제가 알고 싶은 것입니다. *디렉토리 경로의 끝은 무엇을 의미하며 스크립트가 무엇을 하게 합니까?

답변1

여기서 *"와일드카드"는 "0개 이상의 문자와 일치"를 의미합니다. 이를 설명하기 위해 다음 디렉토리를 고려하십시오.

$ ls
dirA  dire  dirE  dirEa  dirEEE
$ echo dirE*
dirE dirEa dirEEE

위에서 볼 수 있듯이 glob은 dirE*일치 dirE하지만 dirEaor 는 dirEEE일치하지 않습니다 (*nix 시스템은 대소문자를 구분합니다).dirAdire

따라서 스크립트에서 이는 이름 dirA/dirB/dirC/dirD/으로 시작한다는 의미입니다 dirE.

답변2

다른 이유로 이 Q&A에 참석하시는 분들을 위해 여기에 메모를 추가하겠습니다.

파일 이름 끝에 a가 표시되는 경우(실제로는 있지만 때로는 (또는 내장 함수) 또는 완료 출력에 표시되는 경우도 있습니다.) *이는 완전히 다릅니다 .lsls -Flsls -Fls-Ftcshzshtcsh

-F옵션을 사용하면 ls항목 끝에 후행 문자를 추가할 수 있습니다.특별한식별을 돕기 위한 파일 이름상세. 파일 이름 나열이 완료되면 동일한 작업을 수행합니다 zsh.tcsh

네가 본다면:

$ ls -F
dir/  fifo|  file  link@  ls*  socket=

이러한 /, |*=파일 이름의 일부가 아니지만(누군가가 사용자를 속이려고 하는 경우일 수 있음) ls다음을 알리기 위해 추가됩니다.

  • dir디렉토리( /) 입니다.
  • fifo명명된 파이프/FIFO( |) 입니다.
  • link심볼릭 링크( @) 입니다.
  • ls실행 가능한 일반 파일입니다( *).(해당 권한에는 최소한 하나의 실행 비트가 있습니다)
  • socketUnix 도메인 소켓입니다( =).

일부 ls구현(및 zsh완성)은 다양한 옵션을 지원하는 터미널의 색상으로 구별될 수도 있습니다.

관련 정보