2017-07-06 19 views
0

変数vがzshに存在するかどうか知りたい場合は、${+v}を使用できます。例:zsh:間接参照による変数の存在のテスト

u=xxx 
v= 
print ${+u} ${+v} ${+w} 

出力。

変数の内容にアクセスするには、変数vに格納されている変数の名前がある場所に、${(P)v}と入力します。例:

a=xxx 
b=a 
print ${(P)b} 

出力xxxの

は、と2つを組み合わせています:変数が存在するかどうかをテストしますが、変数の名前は別の変数に格納されています。これどうやってするの?例:

r=XXX 
p=r 
q=s 

ここでは動作しません私のアプローチです:

print ${+${(P)p}} # Expect 1, because $p is r and r exists. 
print ${+${(P)q}} # Expect 0, because $q is s and s does not exist 

しかし、私はエラーメッセージzshの取得:悪い置換を。

evalに戻らずに私の目標を達成する方法はありますか?

答えて

2
print ${(P)+p} 
print ${(P)+q} 

開きブレースの直後にする必要がありますパラメータ展開の旗のの左括弧。また、pまたはqを明示的に代用する必要はありません。(P)はそれを処理します。それにもかかわらず、${(P)+${p}}および${(P)+${q}}も機能します。

関連する問題