zsh 相當於 bash 的 ${!variable}

zsh 相當於 bash 的 ${!variable}

我剛剛偶然發現了一個在 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是否非零,或者 if$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

儘管可能有更優雅的解決方案。

相關內容