equivalente zsh para ${!variable} do bash

equivalente zsh para ${!variable} do bash

Acabei de encontrar um script que funciona no bash, mas não no 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

o segundo if aparentemente deveria testar, dependendo do kernel, se $LD_LIBRARY_PATHé diferente de zero ou se $DYLD_LIBRARY_PATHé diferente de zero. E então defina ou expanda a respectiva variável.

Como eu faria o mesmo no zsh? E existe uma versão que funciona em zsh e bash?

Responder1

Parece que $(eval echo \$\{$library_path\})funciona:

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

embora possa haver uma solução mais elegante.

informação relacionada