![와일드카드 문자 `* `는 일부 문자열과 일치할 수 없습니까?](https://rvso.com/image/1554899/%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C%20%EB%AC%B8%EC%9E%90%20%60*%20%60%EB%8A%94%20%EC%9D%BC%EB%B6%80%20%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC%20%EC%9D%BC%EC%B9%98%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
ls -al .functions*
-rw-r--r-- 1 root root 471040 Mar 2 10:01 .functions.php.swo
-rw-r--r-- 1 root root 438272 Mar 2 09:57 .functions.php.swp
*
일치할 수 .php.swo
있으며 .php.swp
왜 *
일치하지 않습니까 .functions.php
?
ls -al *.swo
ls: cannot access '*.swo': No such file or directory
ls -al *swo
ls: cannot access '*swo': No such file or directory
답변1
점으로 시작하는 파일은 기본적으로 파일 목록에서 숨겨집니다. 이러한 종류의 파일을 일치시키는 가장 쉬운 방법은 표현식 시작 부분에 점을 넣는 것입니다. 그러나 이는 .
.
ls -al .*.swo
대안은 dotglob
명령을 실행하기 전에 설정하는 것입니다. 그러면 다음으로 시작하는 파일이 .
포함됩니다.
shopt -s dotglob
~/.bashrc
기본적으로 설정하려면 에 추가하세요 .
참고하세요설정 dotglob
으로 인해 의도하지 않은 결과가 발생할 수 있습니다.bash 쉘을 사용할 때 .
(현재 디렉토리)와 ..
(상위 디렉토리)가 모두 나타나기 때문입니다 *
. 세트 로 dotglob
,절대을 사용해보십시오 rm -R *
.
답변2
로서확대-a
Shaido의 답변에 대해 여기서 옵션이 작동하지 않는 이유를 설명하고 싶습니다 .
명령 ls
은~ 아니다와일드카드를 처리합니다. 명령줄 해석기는 다음 단계를 수행합니다.
명령줄 " "을 입력하면 mycommand *.c
명령줄 해석기는 먼저 와일드카드 문자열 " *.c
"을 일치하는 파일 목록으로 바꾼 다음 결과 명령줄을 실행합니다.
mycommand a.c file.c test.c
-a
명령줄 해석기는 모든 명령에 대해 동일한 방식으로 작동하므로 명령 의 경우 "숨겨진 파일 포함"을 의미하는지 알 수 없습니다 ls
( -a
다른 명령의 경우 완전히 다른 의미를 가짐).