Zsh 개발 가이드 (제8 편 변수 수식어)
우 리 는 문자열, 배열, 해시 표, 정수, 부동 소수점 의 기본 적 인 용법 을 이미 알 고 있 지만, 어떤 복잡 한 장면 에 대처 하 는 것 은 여전히 힘 에 부친 다.
변수 수식 어 는 zsh 에서 매우 독특한 개념 을 가지 고 변 수 를 조작 하 는데 기능 적 으로 함수 와 유사 하지만 사용 하기에 더욱 편리 하 다. 한 줄 의 코드 에서 복잡 한 기능 을 실현 하 는 것 은 주로 그것 에 의존한다.대 가 는 가 독성 이 더 떨 어 지 는 것 이 니, 어떻게 쓰 는 지 는 스스로 따 져 봐 야 한다.그것 도 zsh 의 가장 특색 있 는 부분 중의 하나 이다.변수 수식 어 는 주로 배열 과 해시 표 에 사용 되 지만 일부분 은 문자열 (정수 와 부동 소수점 도 문자열 로 처리) 에 사용 할 수 있 습 니 다.
변수 수식어 의 형식
사실 앞의 글 에서 변수 수식어 가 이미 나 왔 지만 그 당시 에는 상세 하 게 설명 하지 않 았 다.
예 를 들 어 대소 문자 변환 의 예 에서
% str="ABCDE abcde"
# ,(U) :u
% echo ${(U)str} --- ${str:u}
ABCDE ABCDE --- ABCDE ABCDE
# ,(L) :l
% echo ${(L)str} --- ${str:l}
abcde abcde --- abcde abcde
이곳 의
(U)
, :l
등 은 모두 변수 수식어 이다.변수 수식 어 는 주로 두 가지 형식 이 있다.${(x)var}
${var:x}
그 중에서 var 는 변수 명 이 고 x 는 하나 이상 의 자모 이 며 서로 다른 자모의 기능 이 다르다.두 번 째 줄 의 사칭 도 다른 기호 일 수 있 습 니 다. ${var} 은 $var 와 기본적으로 같 습 니 다. 큰 괄호 는 변수 이름 의 문자 와 뒤의 문자 가 붙 지 않도록 합 니 다. 보통 괄호 를 늘 릴 필요 가 없습니다.그러나 변수 수식 어 를 사용 하면 대괄호 가 없어 서 는 안 된다.
변수 수식 어 는 끼 워 넣 어서 사용 할 수 있다.수식 어 를 추가 한 변 수 는 여전히 변수 이기 때문에 정상 적 인 변수 와 똑 같이 처리 할 수 있 습 니 다.
% str=abc
% echo ${(U)str}
ABC
% echo ${(C)${(U)str}}
Abc
% echo ${${a:u}:l}
abc
#
% echo ${(C)${a:u}}
Abc
$이후 전체 과정 에 빈 칸 이 있어 서 는 안 됩 니 다. 그렇지 않 으 면 문법 오류 가 발생 할 수 있 습 니 다.문자 가 한데 몰 려 서 가 독성 이 떨 어 지 는 것 을 피 할 수 없다 는 것 이다.그러나 형식 에 익숙해 지면 코드 의 기능 을 쉽게 식별 할 수 있다.비교적 복잡 한 논 리 는 줄 을 바 꾸 어 계속 쓸 수 있 으 며, 반드시 끼 워 넣 을 필요 가 없다.
변수 수식어 의 용법 을 알 게 된 후 중요 한 것 은 어떤 변수 수식어 가 사용 할 수 있 는 지 하 는 것 이다.
변수 기본 값
변수 기본 값 (변 수 를 읽 을 때 변수 가 비어 있 거나 존재 하지 않 으 면 사용 하 는 기본 값) 과 관련 된 동작 입 니 다. 변 수 는 모든 형식 일 수 있 습 니 다.
% var=123
# ,
% echo ${var:-abc}
123
# ( , 、 、 ), abc
% echo ${varr:-abc}
abc
% var=""
# :- ,
% echo ${var-abc}
% echo ${varr-abc}
abc
% var=""
# :- , , abc
% echo ${var:=abc}
abc
% echo $var
abc
% var=abc
# var , 123
% echo ${var::=123}
123
% echo $var
123
% var=""
# var ,
% echo ${var:?error}
zsh: var: error
% var=abc
# var , 123
% echo ${var:+123}
% echo ${varr:+123}
배열 을 문자열 로 연결 합 니 다.
% array=(aa bb cc dd)
#
% echo ${(F)array}
aa
bb
cc
dd
#
% str=$array
% echo $str
aa bb cc dd
#
% echo ${(j:-=:)array}
aa-=bb-=cc-=dd
문자열 을 배열 로 나 누 기
% str=a##b##c##d
% array=(${(s:##:)str})
% print -l $array
a
b
c
d
출력 변수 형식
# integer float, ,
% integer i=1
% float f=1.2
% str=abc
% array=(a b c)
% local -A hashmap=(k1 v1 k2 v2)
% echo ${(t)i} ${(t)f} ${(t)str} ${(t)array} ${(t)hashmap}
integer float scalar array association
문자열, 배열 또는 해시 표 내장 값
여러 겹 으로 끼 워 넣 을 수 있 습 니 다.
% str=abcde
% echo ${${str[3,5]}[3]}
e
% array=(aa bb cc dd)
% echo ${${array[2,3]}[2]}
cc
# ,
% echo ${${array[2]}[2]}
b
% local -A hashmap=(k1 v1 k2 v2 k3 v3)
% echo ${${hashmap[k1]}[2]}
1
문자열 내용 을 변수 이름 으로 재 추출 합 니 다.
더 이상 번 거 로 운 eval 을 통 해 이 일 을 할 필요 가 없다.
% var=abc
% abc=123
% echo ${(P)var}
123
배열 의 문자열 을 정렬 하거나 절단 합 니 다.
% array=(abc bcde cdefg defghi)
#
% echo ${(l:2:)array}
bc de fg hi
#
% print -l ${(l:7:)array}
abc
bcde
cdefg
defghi
#
% print -l ${(l:7::0:)array}
0000abc
000bcde
00cdefg
0defghi
# ,
% print -l ${(l:7::0::1:)array}
0001abc
001bcde
01cdefg
1defghi
#
% print -l ${(r:7::0::1:)array}
abc1000
bcde100
cdefg10
defghi1
총결산
글 에서 비교적 자주 사용 하 는 변수 수식어 몇 개 만 소 개 했 을 뿐 언급 하지 않 은 것 도 있 고 나중에 보충 할 수 있다.
레 퍼 런 스
http://www.bash2zsh.com/zsh_r...
본 고 는 더 이상 업데이트 되 지 않 습 니 다. 전체 시 리 즈 는 여기 서 유지 보 수 를 업데이트 합 니 다. github.com/goreliu/zshguide
유 료 로 Windows, Linux, Shell, C, C++, AHK, Python, JavaScript, Lua 등 분야 관련 문 제 를 해결 하고 유연 하 게 가격 을 책 정 합 니 다. 상담 을 환영 합 니 다. 위 챗 ly 50247.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.