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

두 번째 if는 커널에 따라 if가 $LD_LIBRARY_PATH0이 아닌지 또는 if가 0이 아닌지 여부를 분명히 테스트해야 합니다. $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

더 우아한 해결책이 있을 수도 있습니다.

관련 정보