メモの日々


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

参考