우리 모두 알고 있듯이 문자(!)는 예약되어 있습니다. 이상한 점은 일반 사용자에게는 작동하지만 루트로는 작동하지 않는다는 것입니다. 문제를 해결하기 위해 몇 가지 방법을 시도했지만 성공하지 못했습니다. 이러한 것을 이스케이프할 수 있는지 알고 싶습니다. 문자 .
내가 실행하려는 명령은 간단하며 일부 특정 파일을 무시합니다.
mkdir --parents www/; mv !(init.sh|environment.sh|docs|www) $_
답변1
역할을 회피하는 것이 아니다 !
.
쉘은 ksh
일부 확장된 와일드카드 패턴을 구현하며 이것이 !(...|...|...)
그 중 하나입니다. 이 패턴은 괄호 안의 패턴과 일치하지 않는 모든 항목과 일치합니다.
일부 쉘은 와일드카드 패턴을 사용할 수 있습니다 ksh
. 예를 들어, 쉘( ) extglob
에서 쉘 옵션을 설정하면 쉘( )에서 쉘 옵션을 설정하는 것과 bash
마찬가지로 이러한 기능이 활성화됩니다 .shopt -s extglob
KSH_GLOB
zsh
setopt KSH_GLOB
루트 사용자가 사용하고 있는 셸은 분명히 ksh
globbing 패턴 사용을 지원하지 않으며, 가능한지 여부도 확실하지 않습니다( dash
즉, 셸에 이 기능이 없음). 반면 일반 사용자는 실제 ksh
셸을 실행하거나 셸 초기화 파일에서 올바른 셸 옵션을 명시적으로 활성화하거나 일부 타사 확장 기능을 사용하여 자동으로 이러한 모드를 기본적으로 활성화하는 것 같습니다. 셸 옵션은 기본적으로 활성화되어 있습니다.