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/
匿名関数のプライベートによってオーバーライドされるのではなく、オリジナルをmy_function
取得する方法を学びます。$i
$i