Zsh 개발 가이드 (제1 6 편 alias 와 eval 의 용법)

3122 단어
독 서 를 지도하 다
alias (별명) 는 셸 에서 매우 자주 사용 되 는데 주로 명령 에 별명 을 지어 입력 을 간소화 하 는 데 사용 된다.그러나 주로 대화 장면 에 사용 되 는데 스 크 립 트 에 서 는 거의 사용 되 지 않 습 니 다.eval 은 매우 강력 한 명령 입 니 다. 문자열 을 코드 로 해석 하여 실행 하 는 기능 이지 만 복잡성 을 추가 로 증가 시 킬 수 있 습 니 다. 불필요 한 장면 은 되도록 적 게 사용 하 는 것 이 아 닙 니 다.alias 와 eval 은 상관 이 없 는 것 처럼 보이 지만 기능 적 으로 비슷 한 점 이 있어 서 같이 놓 고 이야기 합 니 다.
alias
가장 전형 적 인 예 는 ls - l 을 ll 로 간략화 하 는 것 이다.
% alias ll='ls -l'
% ll
total 0
drwx------ 0 goreliu goreliu 512 Aug 31 13:55 tmux-1000
drwxr-xr-x 0 goreliu goreliu 512 Aug 31 13:37 yaourt-tmp-goreliu

alias 의 효 과 는 문자열 을 직접 바 꾸 는 것 과 같 아서 이해 하기 쉽다.
#      alias,       alias
% alias
ll='ls -l'
lla='ls -F --color --time-style=long-iso -lA'
...

이러한 alias 는 줄 의 첫머리 가 나타 날 때 만 해 석 됩 니 다.그러나 zsh 에는 더 강력 한 기능 을 가 진 전역 alias 가 있 습 니 다. 줄 의 맨 위 에 있 지 않 아 도 해석 할 수 있 습 니 다.
% alias -g G='| grep'

% ls G tmux
tmux-1000

그러나 이 로 인해 발생 할 수 있 는 부작용 에 각별히 주의해 야 합 니 다. 예 를 들 어 G 라 는 파일 을 만 들 고 싶 습 니 다.
% touch G
touch: missing file operand
Try 'touch --help' for more information.
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

결국 G 는 바 뀌 었 고 G 양쪽 에 따옴표 만 붙 일 수 있 었 다.
전체 alias 가 잘못 사용 되 지 않 으 면 재난 적 인 결 과 를 초래 할 수 있 습 니 다. 예 를 들 어 중요 한 파일 을 잘못 삭제 한 다음 에 사용 해 야 합 니 다.
eval
eval 의 기능 은 문자열 을 코드 로 실행 하 는 것 입 니 다.보기 에는 매우 간단 한 것 같 지만 실제 적 으로 매우 복잡 한 내용 과 관련 되 는데 주로 기호 전의 로 인 한 의미 문제 이다.
bash 에서 eval 의 중요 한 사용 장면 은 변수의 값 을 변수 이름 으로 한 다음 에 변수 값 을 가 져 오 는 것 입 니 다. c 언어 에서 변 수 를 가리 키 는 지침 과 유사 합 니 다.
% str1=str2
% str2=abc
% eval echo \$$str1
abc

여기 하나\와 두 개의 $가 있 습 니 다. 그 이 유 는 두 번 째 $가 평소 와 마찬가지 로 str 1 의 값 을 정상적으로 가 져 오기 때 문 입 니 다. 첫 번 째 $는 전의 가 필요 합 니 다. eval 이 실행 하 는 과정 에서 str 2 의 값 을 가 져 와 야 하기 때문에 지금 바로 펼 칠 수 없습니다.
이 용법 은 문제 가 생기 기 쉬 우 며 가 독성 이 매우 떨어진다.다행히 zsh 에 서 는 이렇게 사용 할 필요 가 없어 서 더 좋 은 방법 이 있 습 니 다.
% str1=str2
% str2=abc
% echo ${(P)str1}
abc

(P) 이 장면 에 전문 적 으로 사용 되 며, 더 이상 의 미 를 바 꿀 필요 가 없습니다 $.
또한 eval 은 사용자 의 입력 을 받 아들 이 는 스 크 립 트 와 같은 동적 실행 코드 를 사용 하기 도 합 니 다. 이 입력 도 스 크 립 트 코드 이 므 로 eval 로 실행 할 수 있 습 니 다.그러나 이러한 용법 은 매우 위험 하 다. 스 크 립 트 에 여러 가지 위험 조작 이 있 을 수 있 고 셸 의 문법 이 유연 하기 때문에 정적 스 캔 방법 으로 위험 조작 여 부 를 판단 하기 어렵다.믿 을 수 없 는 코드 는 실행 해 서 는 안 된다.꼭 실행 해 야 하 더 라 도 먼저 파일 에 쓰 고 실행 하여 전 달 된 코드 가 자신의 논리 에 영향 을 주지 않도록 할 수 있다.
그러나 zsh 에서 eval 을 전혀 사용 할 필요 가 없다 는 것 은 아니다. 어떤 특별한 장면 (예 를 들 어 문법 을 개조 하고 문법 사탕 을 넣 는 것) 은 유용 하 다.그러나 사용 하려 면 부작용 에 주의해 야 하고 이해득실 은 스스로 따 질 수 밖 에 없다.eval 의 구체 적 인 용법 은 bash 중의 기본 과 다 르 지 않 습 니 다. 인터넷 에서 bash eval 용법 을 검색 하여 알 수 있 습 니 다. 여 기 는 소개 하지 않 겠 습 니 다.
총결산
본 고 는 alias 의 용법 과 eval 의 장면 사용 장면 을 간단하게 소개 했다.alias 는 간단 합 니 다. 주로 zshrc 에서 사용 합 니 다.eval 은 매우 복잡 해서 불필요 한 장면 은 가능 한 한 사용 을 피한다.
본 고 는 더 이상 업데이트 되 지 않 습 니 다. 모든 시 리 즈 는 여기 서 유지 보 수 를 업데이트 합 니 다: github. com/goreliu/zshguide
유 료 로 Windows, Linux, Shell, C, C++, AHK, Python, JavaScript, Lua 등 분야 관련 문 제 를 해결 하고 유연 하 게 가격 을 책 정 합 니 다. 상담 을 환영 합 니 다. 위 챗 ly 50247.

좋은 웹페이지 즐겨찾기