错误替换 bash 等效于 sh
bad substitution bash equivalent in sh
我在 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 命令
sh 中的 ${!variable}
相当于什么?
我试过 ${-variable}
但这是一个错误的命令。
Sh 和 Dash 不支持此功能。
通过正确查看 shebang 并避免 sh myscript
(参见 Why does my bash code fail when I run it with sh?)
,确保脚本始终以 bash 运行
或者,使用eval
将其重写为sh,但要注意代码注入:
#!/bin/sh
name=PATH
eval "echo \"$$name\""
我在 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 命令sh 中的 ${!variable}
相当于什么?
我试过 ${-variable}
但这是一个错误的命令。
Sh 和 Dash 不支持此功能。
通过正确查看 shebang 并避免 sh myscript
(参见 Why does my bash code fail when I run it with sh?)
或者,使用eval
将其重写为sh,但要注意代码注入:
#!/bin/sh
name=PATH
eval "echo \"$$name\""