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_PATH가 0이 아닌지 또는 if $DYLD_LIBRARY_PATH가 0이 아닌지 테스트해야 합니다. 그런 다음 해당 변수를 설정하거나 확장합니다.

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

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

관련 정보