bash の ${!variable} に相当する zsh

bash の ${!variable} に相当する zsh

私は、bash では動作するが zsh では動作しないスクリプトを偶然見つけました:

if [ Darwin = `uname` ]; then
   library_path=DYLD_LIBRARY_PATH
else
   library_path=LD_LIBRARY_PATH
fi
if [ -z "${!library_path}" ]; then
   eval ${library_path}=${thisdir}/lib64:${thisdir}/lib; export ${library_path}
else
   eval ${library_path}=${thisdir}/lib64:${thisdir}/lib:${!library_path}; export ${library_path}
fi

2 番目の if は、カーネルに応じて、 が$LD_LIBRARY_PATHゼロ以外かどうか、または が$DYLD_LIBRARY_PATHゼロ以外かどうかをテストする必要があるようです。その後、それぞれの変数を設定するか、拡張します。

zsh で同じことを行うにはどうすればいいでしょうか? また、zsh と bash で動作するバージョンはありますか?

答え1

動作するようです$(eval echo \$\{$library_path\}):

if [ Darwin = `uname` ]; then
   library_path=DYLD_LIBRARY_PATH
else
   library_path=LD_LIBRARY_PATH
fi
if [ -z $(eval echo \$\{$library_path\}) ]; then
   eval ${library_path}=${thisdir}/lib64:${thisdir}/lib; export ${library_path}
else
   eval ${library_path}=${thisdir}/lib64:${thisdir}/lib:$(eval echo \$\{$library_path\}); export ${library_path}              
fi

もっとエレガントな解決策があるかもしれません。

関連情報