2017年12月13日(水) [長年日記]
■ [shell][howto] zshでPATHのような変数の値が重複しないようにする
zshにて環境変数PATHのようにコロン区切りの変数の値が重複しないようにしたい。
$ VAR=aaa:bbb:aaa
としたときに
$ echo $VAR aaa:bbb
と振る舞って欲しいということ。 以前は「いい方法は見当たらなかった」と書いているがいい方法はある。
設定方法
組み込みコマンドのtypesetを使って
$ typeset -TU VAR var
とする。「var」の部分はほかの変数と同名にならなければ何でもよい。
-Tオプションで変数VARを配列変数varと関連づけ、-Uで重複除去の属性をセットしている。-Tは余計な設定に感じるが、これが無いと動作しない(少なくとも手元のzsh 4.3.11では)。
動作例
$ VAR=aaa:bbb:aaa $ echo $VAR aaa:bbb:aaa $ typeset -TU VAR var $ echo $VAR aaa:bbb $ VAR=ccc:ddd:ccc:ddd $ echo $VAR ccc:ddd
参考
- 2.5.13: Other path-like things (A User's Guide to the Z-Shell)
- typeset (The Z Shell Manual)