我在 Bash 中有這個腳本:
for conffile in $(ls -1 ${KSCFGISOLINUXFILESLOCATION}); do
for variable in CFG_CRYPT CFG_DISK CFG_DNS CFG_DOMAIN CFG_GATEWAY CFG_HOSTNAME CFG_IFACE CFG_IP CFG_NETMASK CFG_USERKEY CFG_ACTION CFG_TITLE CFG_INITURL CFG_OSVERS CFG_ISOBASE CFG_ISOPATH CFG_ISOPATH_SIMPLE SHI_BOOT_URL DEBUG UUID LOGDIR WWWDIR OSINITDIR WKGDIR; do
SUBSTITUTIONCOUNT=$( grep -c "%%${variable}%%" ${conffile} | cut -f1 -d" " )
if [ ${SUBSTITUTIONCOUNT} -gt 0 ]; then
echo "Modifying ${variable} in ${SUBSTITUTIONCOUNT} places"
echo "Updating ${variable} in ${conffile} to ${-variable}"
sed -i "s^%%${variable}%%^${-variable}^g" ${conffile} 2>&1
fi
done
done
當我在 sh shell 中運行它時,它會引發以下錯誤:
/tmp/wf_script-JI1La1/rhel84isoinstall.sh: 158: /tmp/wf_script-JI1La1/rhel84isoinstall.sh: Bad substitution
問題是我試圖在 sh shell 中使用 bash 命令
${!variable}在 sh 中的等價物是什么?
我試過了,${-variable}但這是一個錯誤的命令。
uj5u.com熱心網友回復:
Sh 和 Dash 不支持此功能。
通過正確查看 shebang 并避免使用 bash 確保腳本始終使用 bash 運行sh myscript(請參閱為什么使用 sh 運行時我的 bash 代碼會失敗?)
或者,使用 將其重寫為 sh eval,但要注意代碼注入:
#!/bin/sh
name=PATH
eval "echo \"\$$name\""
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/333627.html
