나는 다양한 bash "예약어"의 의미를 스스로 가르쳐 왔습니다.
이 작업을 수행하는 동안 실수로 명령을 입력했습니다.
echo !()
놀랍게도 이 명령은 명령과 동일한 출력을 실행하고 생성합니다.
echo *
즉, 출력은 현재 디렉터리의 내용 목록입니다.
file1 file2 directory1 directory2
!()
bash가 본질적으로 로 확장되는 이유는 무엇입니까 *
?
()
다른 문맥에서는 잘못된 표현인 것 같아 의미를 판단할 수 없습니다 .
답변1
이건 배쉬야extglob 패턴 매칭Korn 쉘(그 하위 집합)에서 구문을 복사합니다. !(pattern)
, extglob
어떤 방식으로든 활성화되면(예: bash_completion
대화형 셸의 추가 기능을 통해) 현재 작업 디렉터리에서 일치하지 않는(기본적으로 숨겨지지 않은) 파일의 이름으로 확장됩니다 pattern
.
빈 패턴을 사용하는 경우 이름이 현재 디렉터리에 있는 모든 파일을 의미합니다.아니요빈 문자열이지만 파일 이름은 비워 둘 수 없으므로 이것이 모두(기본적으로 숨겨지지 않은) 파일입니다.
옵션이 활성화되면 zsh
ksh와 동일한 결과를 얻게 됩니다.echo ^
extendedglob
^pattern
!(pattern)