はじめに
環境変数を重複して設定してしまった経験ありませんか?
zsh限定ですが環境変数をユニークに設定する方法を紹介します。
:区切りの変数
PATHのように:区切りで追加するタイプの環境変数は、以下のように書くことで重複を排除し、重複した値を追加できなくすることができます。
typeset -T PATH path
typeset -U PATH path
typeset -T PATH pathで、PATH環境変数と互いに値が連動するpath変数(配列)を生成します。これらをtypeset -Uに渡すことで、既存の重複を排除し、以降は重複した値を追加しようとしても無視されるようにします。
typeset -UにpathかPATHの片方を渡すだけでも、実行時点での重複を排除できますが、-Uを付与していない方から重複した値が追加できてしまうため、両方とも渡すことを推奨します。
その他の区切り文字の変数
typeset -Tはデフォルトの区切り文字が:となっていますが、以下のように第3引数で区切り文字を指定することもできます。以下ではTESTという変数に,区切りで複数の値が指定されていると仮定しています。
typeset -T TEST test ","
typeset -U TEST test
おまけ
PATHには元々連動している配列がある
PATH環境変数は元々path変数が連動しており、上記のようにtypeset -T PATH pathの工程を飛ばして、typeset -Uで重複を削除することができますが、連動する配列変数が存在しないものについては、typeset -Tの工程が必要となります。
連動している変数を確認する方法
以下を実行することで、その変数の属性や値とともに、連動している変数などを調べることができます。
typeset -p TEST
連動している値がある場合にはexport -T TEST test=( bar foo ) ,のように-Tとともに連動している変数名や区切り文字が表示されます。
ちなみに重複を排除している場合にはexport -UT TEST test=( bar foo bars ) ,のようにUが付与されます。
まとめ
zshでしか使えませんが、変数の重複を防ぐ方法を紹介しました。