*
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
하지만 dirEa
or 는 dirEEE
일치하지 않습니다 (*nix 시스템은 대소문자를 구분합니다).dirA
dire
따라서 스크립트에서 이는 이름 dirA/dirB/dirC/dirD/
으로 시작한다는 의미입니다 dirE
.
답변2
다른 이유로 이 Q&A에 참석하시는 분들을 위해 여기에 메모를 추가하겠습니다.
파일 이름 끝에 a가 표시되는 경우(실제로는 있지만 때로는 (또는 내장 함수) 또는 완료 출력에 표시되는 경우도 있습니다.) *
이는 완전히 다릅니다 .ls
ls -F
ls
ls -F
ls-F
tcsh
zsh
tcsh
이 -F
옵션을 사용하면 ls
항목 끝에 후행 문자를 추가할 수 있습니다.특별한식별을 돕기 위한 파일 이름상세. 파일 이름 나열이 완료되면 동일한 작업을 수행합니다 zsh
.tcsh
네가 본다면:
$ ls -F
dir/ fifo| file link@ ls* socket=
이러한 /
, |
및 *
는 =
파일 이름의 일부가 아니지만(누군가가 사용자를 속이려고 하는 경우일 수 있음) ls
다음을 알리기 위해 추가됩니다.
dir
디렉토리(/
) 입니다.fifo
명명된 파이프/FIFO(|
) 입니다.link
심볼릭 링크(@
) 입니다.ls
실행 가능한 일반 파일입니다(*
).(해당 권한에는 최소한 하나의 실행 비트가 있습니다)socket
Unix 도메인 소켓입니다(=
).
일부 ls
구현(및 zsh
완성)은 다양한 옵션을 지원하는 터미널의 색상으로 구별될 수도 있습니다.