Zsh 할당에 변수를 사용하면 혼란스럽습니다.i
% for i in '/houdi/lookup' '/komando/' ;{ echo value i = "$i" }
zsh: bad math expression: operand expected at `/houdi/loo...'
하지만 다른 이름으로 바꾸면:
% for n in '/houdi/lookup' '/komando/' ;{ echo value i = "$n" }
value i = /houdi/lookup
value i = /komando/
명확한 설명이 있나요?
감사해요
답변1
변수가 i
, 또는 에 의해 정수 또는 부동 소수점으로 선언되었을 수 있습니다.integer i
typeset -i i
float i
typeset -E i
typeset -F i
그런 다음 할당을 시도하면 /houdi/lookup
쉘은 이를 산술 표현식으로 해석하려고 시도하고 첫 번째 /
나누기 연산자에 첫 번째 피연산자가 없기 때문에 불평합니다.
조사하다:
typeset -p i
이는 다음 중 하나와 유사한 결과를 반환할 수 있습니다.
typeset -i i=1
typeset -F i=0.0000000000
typeset -E i=1.2e+05
typeset +i i
(또는 +E
관련 +F
)을 사용하여 이러한 정수/부동 소수점 속성을 제거하고 -g
in 함수를 사용하여 변수 로캘 생성을 방지할 수 있습니다.
unset i
또한 값과 모든 속성을 설정 해제하므로 함수나 익명 함수 내에서 변수를 로컬로 선언합니다. 예를 들면 다음과 같습니다.
(){
local i
for i (/houdi/lookup /komando/) print -r value i = $i
}
(또한 덜 화려한 형태의 루핑을 사용합니다 for
).
로컬이 호출하는 함수가 아닌 익명 함수에만 사용할 수 있는 $i
private
경우 도 있을 수 있습니다 .$i
zmodload zsh/param/private
integer i=12
my_function() {
print 'I expect $i to be integer'
typeset -p i
}
(){
private i
for i (/houdi/lookup /komando/) {
my_function
print -r value i = $i
}
}
이것은 만든다:
I expect $i to be integer
typeset -g -i i=12
value i = /houdi/lookup
I expect $i to be integer
typeset -g -i i=12
value i = /komando/
익명 함수의 private 에 의해 재정의되는 대신 my_function
원본을 얻는 방법을 알아보세요 .$i
$i