Zsh 개발 가이드 (제1 1 편 변수의 진급 내용)
이전에 우 리 는 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.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
✨〰️ ZI 〰️✨ Vim 구문❮ ZI ❯ 🧙♀️ Zsh를 위한 스위스 아미 나이프. 모든 것을 함께 붙일 수 있도록 설계되었습니다. zsh 유형의 파일에 있는 명령에 대한 Vim 구문 정의입니다. 📥 설치 Vim 플러그인으로 로드합니다. 예를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.