모든 Python 파일에서 ".vars()" 문자열을 검색하고 싶고 어떻게든 "grep"을 다음과 같이 재정의했습니다.
% grep .vars() *.py
% which grep
grep () {
*.py
}
이 문제를 사용 unset grep
하고 수정하려고 시도했지만 성공하지 못했습니다. export grep=/bin/grep
내가 실수로 한 일을 누군가 설명해 줄 수 있나요?
참고: Bash에서는 다음과 같이 실패합니다.
"예기치 않은 표시 '('" 근처에 구문 오류가 있습니다.
답변1
여기에는 두 개의 함수가 정의되어 있습니다. 하나는 이름이 지정 grep
되고 다른 하나는 이름이 지정 됩니다 vars
.*.py
grep .vars() *.py
이러한 기능을 제거하고 섀도우를 취소하려면 다음을 grep
수행해야 합니다.
$ unset -f grep .vars
에서 man zshbuiltins
:
unset [ -fmv ] name ... ... unset -f is equivalent to unfunction. ... unfunction Same as unhash -f. ... unhash ... The -f option causes unhash to remove shell functions.
답변2
이것은 함수 정의입니다. 보다 정확하게는 동일한 코드로 두 개의 함수를 정의하는 것입니다. zsh에는 함수 정의의 기본 구문에 대한 여러 확장이 있기 때문에 이상해 보입니다 name () { instruction; … }
.
- Zsh는 여러 이름을 허용합니다. 함수 와 동일한 본문이
name1 name2 () { instruction; … }
정의 되어 있습니다. 나는 이것을 지원하는 다른 쉘을 알지 못합니다.name1
name2
- Zsh에서는
.
함수 이름을 입력할 수 있습니다(예: bash, 대시 또는 ksh93은 제외). 이식 가능한 함수 이름에는 ASCII 문자, 숫자, 밑줄만 사용할 수 있습니다. - Zsh에서는 모든 명령을 함수 본문으로 사용할 수 있습니다. 일부 셸(특히 bash)에는 복합 명령이 필요합니다(모두 POSIX 요구 사항임).
주제가 그룹인 가장 일반적인 형태입니다.name () { instruction; … }
또한 이식성이 뛰어나며 서브셸에서 함수 본문을 실행합니다. 다음과 같은 다른 복합 명령은 기술적으로 유효합니다.name () ( instruction; )
POSIX 표준을 따르는 함수 정의이지만 실제로는 극히 드뭅니다.name () if condition; then instruction1; else instruction2; fi
이는 zsh(및 ksh 및 dash)에 따르면 완벽하게 유효한 함수 정의이지만 POSIX 또는 bash에 따르면 그렇지 않습니다.name () echo hello
()
모든 셸에서 앞의 공백은 선택 사항입니다.
효과를 실행 취소하려면 grep .vars() *.py
두 기능을 모두 설정 해제하세요.
unset -f grep .vars
또는
unfunction grep .vars
답변3
당신은기능. 이는 현재 쉘 내에서만 작동합니다.
간단한 기능은 다음과 같습니다
f() echo hello
이제 "f" 명령이 인사할 것입니다.
$ f
hello
이를 지우는 가장 쉬운 방법은 unset -f
명령을 사용하는 것입니다.
귀하의 경우:
unset -f grep