zsh-Äquivalent für Bashs ${!variable}

zsh-Äquivalent für Bashs ${!variable}

Ich bin gerade über ein Skript gestolpert, das in Bash, aber nicht in Zsh funktioniert:

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

das zweite if soll anscheinend je nach Kernel prüfen, ob $LD_LIBRARY_PATHes ungleich null ist, oder ob $DYLD_LIBRARY_PATHes ungleich null ist. Und dann entweder die jeweilige Variable setzen oder erweitern.

Wie kann ich dasselbe in zsh machen? Und gibt es eine Version, die in zsh und bash funktioniert?

Antwort1

Es scheint $(eval echo \$\{$library_path\})zu funktionieren:

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

Es könnte jedoch eine elegantere Lösung geben.

verwandte Informationen