Zsh 개발 가이드 (제1 1 편 변수의 진급 내용)

5263 단어 shellzshlinux
독 서 를 지도하 다
이전에 우 리 는 zsh 아래 의 다섯 가지 변수 (문자열, 배열, 해시 표, 정수, 부동 소수점) 의 기본 용법 을 차례대로 말 한 적 이 있다.그러나 변수의 사용 에 있어 비교적 진 급 된 내용 도 있 는데 이것 은 비교적 특별한 장면 에 도움 이 된다.
typeset 명령
type: set 명령 은 변 수 를 상세 하 게 설정 하 는 데 사 용 됩 니 다.우 리 는 이전에 하 쉬 표 편 에서 그것 을 본 적 이 있다.type: set - A 는 해시 표를 정의 할 수 있 습 니 다.
% typeset -A hashmap=(aa bb cc dd)

그러나 우 리 는 나중에 local 을 사용 합 니 다. local 의 기능 은 hashmap 과 같 기 때 문 입 니 다. (- f 와 - g 를 사용 할 수 없 는 것 을 제외 하고 이 두 옵션 은 자주 사용 되 지 않 습 니 다) 더 짧 고 쉽게 입력 할 수 있 습 니 다.이 이름 은 기능 을 잘 반영 하기 때문에 type: set 명령 을 언급 합 니 다.그러나 이것 을 알 게 된 후에 우 리 는 local 명령 을 계속 사용 할 수 있 습 니 다. 왜냐하면 그것 은 똑 같 기 때 문 입 니 다.
type: set 명령 은 변수 에 작용 하여 다양한 효 과 를 낼 수 있 는 옵션 이 많 습 니 다.
문자열 내용 을 소문 자 나 대문자 로 강제 합 니 다.
# 强制字符串内容为小写
% local -l str=abcABC && echo $str
abcabc

# 强制字符串内容为大写
% local -u str=abcABC && echo $str
ABCABC

환경 변수 로 변 수 를 설정 합 니 다.
% local -x str=abc
# 通常使用 export,功能一样
% export str=abc

환경 변 수 는 하위 프로 세 스에 서 읽 을 수 있 습 니 다.
읽 기 전용 변수 로 변 수 를 설정 합 니 다.
% local -r str1=abc
# 通常使用 readonly,功能一样
% readonly str2=abc

% str1=bcd
zsh: read-only variable: str1
% str2=bcd
zsh: read-only variable: str2

중복 요 소 를 포함 하지 않 는 배열 설정
% local -U array=(aa bb aa cc) && echo $array
aa bb cc

정수 의 자릿수 를 설정 하 다
# 如果位数不够,输出内容会用 0 补全
% local -Z 3 i=5 && echo $i
005

# 如果超出范围会被截断
% local -Z 3 i=1234 && echo $i
234

진 변환
다른 진 디 스 플레이 로 정수 설정:
% local -i 16 i=255
% echo $i
16#FF

2 에서 36 사이 의 임 의 진 을 설정 할 수 있 습 니 다.몇 진수 디 스 플레이 를 설정 하면 계산 에 영향 을 주지 않 고 디 스 플레이 형식 만 다 릅 니 다.
[\# n] num 으로 도 10 진법 을 n 진법 으로 표시 할 수 있 습 니 다.
% echo $(([#16] 255))
16#FF

n\# num 으로 n 진 정 수 를 10 진 으로 표시 할 수 있 습 니 다.
% echo $((16#ff))
255

우 리 는 일련의 함 수 를 정의 하여 진 을 빠르게 바 꿀 수 있 습 니 다. bc 등 외부 명령 을 사용 할 필요 가 없습니다.
0x() {
    echo $((16#$1))
}

0o() {
    echo $((8#$1))
}

0b() {
    echo $((2#$1))
}

p16() {
    echo $(([#16] $1))
}

p8() {
    echo $(([#8] $1))
}

p2() {
    echo $(([#2] $1))
}


# 其他进制转十进制
% 0x ff
255
% 0b 1101
13

# 十进制转其他进制
% p16 1234
16#4D2

동시에 여러 변수 에 같은 값 을 부여 합 니 다.
% local {i,j,k}=123
% echo $i $j $k
123 123 123

바 인 딩 문자열 과 배열
% local -T DIR dir
% dir=(/a /b/c /b/d /e/f)
% echo $DIR
/a:/b/c:/b/d:/e/f

# 删除 dir 后,DIR 也会被删除(反之亦然)
% unset dir
% echo $+DIR
0

Linux 에 서 는 구분자 콜론 이 있 는 문자열 (예 를 들 어 $PATH) 을 처리 해 야 합 니 다.그 중 한 필드 만 수정 하면, 비교적 번거롭다.local - T 는 문자열 을 배열 에 연결 할 수 있 습 니 다. 이렇게 배열 을 직접 수정 하면 문자열 내용 도 동기 화 됩 니 다 (반대로 도 마찬가지 입 니 다).사실 zsh 에서 $PATH 문자열 은 $path 배열 과 연결 되 어 있 습 니 다. $path 를 수정 하여 $PATH 를 수정 하 는 목적 을 달성 할 수 있 습 니 다. 이것 은 일부 장면 에서 매우 편리 할 것 입 니 다.
변수의 정의 방식 보이 기
% array=(aa bb cc)
% local -p array
typeset -a array=(aa bb cc)

% array+=(dd)
% local -p array
typeset -a array=(aa bb cc dd)

따옴표
bash 를 사용 한 독자 들 은 아마 안에 있 는 작은 따옴표 에 깊 은 인상 을 남 길 것 입 니 다. 많은 곳 에서 작은 따옴표 가 붙 지 않 으 면 실 수 를 할 수 있 습 니 다. 실 수 를 피하 기 위해 많은 사람들 이 변수 좌우 에 작은 따옴표 를 붙 입 니 다. 번 거 로 우 시 겠 지만 코드 도 복잡 해 보 입 니 다.
사실 zsh 에 서 는 그런 문제 가 없습니다. 변수 양쪽 에 더 블 따옴표 가 필요 없고 이상 한 오류 가 발생 하지 않 습 니 다.그래도 따옴표 가 필요 한 곳 이 있 습 니 다.
따옴표 가 필요 한 장면:
  • 이와 같은 문자 나 특수 기 호 를 포함 하 는 문자열 "aa bb \t
    *"
    이 코드 에 나타 날 때 양쪽 에 작은 따옴표 가 붙 어야 합 니 다. 이것 은 설명 이 필요 없습니다.
  • 명령 을 호출 할 때 결 과 를 하나의 문자열 로 처리 하려 면 더 블 따옴표 $() 를 추가 해 야 합 니 다. 그렇지 않 으 면 명령 결과 에 빈 칸 이 있 으 면 "$()" 여러 문자열 로 전 개 됩 니 다.
  • 배열 을 하나의 문자열 로 처리 하려 면 따옴표 가 필요 합 니 다. $()
  • 다른 것 은 원래 하나의 문자열 이 아 닌 것 으로 하나의 문자열 로 전환 해 야 하 는 장면 입 니 다. 작은 따옴표 가 필요 합 니 다.

  • 나머지 상황 은 보통 작은 따옴표 가 필요 하지 않 고 전형 적 인 상황 이다.
  • 그 어떠한 상황 에서 도 문자열 변수의 양쪽 에 작은 따옴표 가 필요 하지 않 습 니 다. 안의 내용 이 아무리 특수 하거나 변수 가 존재 하지 않 아 도 상관 없습니다. 예 를 들 어 array=(a b); print -l "$array".
  • 형식 을 바 꾸 지 않 으 면 (예 를 들 어 배열 이 문자열 로 바 뀌 는 것) 그 어떠한 변수의 양쪽 에 도 따옴표 가 필요 하지 않 습 니 다.
  • $str $1 $2 이러한 매개 변 수 는 (사실은 모두 하나의 문자열) 더 블 따옴표 가 필요 하지 않 습 니 다. 내용 이 무엇이든 매개 변수 가 존재 하 는 지 여부 입 니 다.

  • 이상 의 7 가지 상황 은 거의 모든 장면 을 덮 었 습 니 다. 덮어 쓰 지 않 은 것 이 있 으 면 시도 해 보 세 요. (안에 있 는 내용 에 빈 칸, 줄 바 꿈 과 다른 특수 문자 등 을 포함 하여 결과 가 예상 에 부합 되 는 지 확인 하 세 요)
    총결산
    본 고 는 비교적 사용 되 는 type: set (또는 local) 명령 의 용법 을 간단하게 소개 하 였 으 며, type: set 명령 은 다른 매개 변수 가 많 지만, 일반적으로 사용 되 지 않 으 며, 앞으로 도 계속 업데이트 할 것 입 니 다.
    레 퍼 런 스
    http://www.bash2zsh.com/zsh_r...
    http://www.linux-mag.com/id/1...
    역 사 를 갱신 하 다
    20170831: '따옴표 추가 해 야 할 곳' 추가
    본 고 는 더 이상 업데이트 되 지 않 습 니 다. 전체 시 리 즈 는 여기 서 유지 보 수 를 업데이트 합 니 다. github.com/goreliu/zshguide
    유 료 로 Windows, Linux, Shell, C, C++, AHK, Python, JavaScript, Lua 등 분야 관련 문 제 를 해결 하고 유연 하 게 가격 을 책 정 합 니 다. 상담 을 환영 합 니 다. 위 챗 ly 50247.

    좋은 웹페이지 즐겨찾기