我有一个bash脚本文件,该文件在Ubuntu 16.04中运行良好,但是自从我升级到Ubuntu 18.10以来,该文件不起作用。
#!/bin/bash
a="1"
name="a"
value=${!name}
echo "value=" $value # "value=1"
name="some string"
value=${!name} # bad substitution error
在Ubuntu 16.04中,不会发生value = $ {!name}的“错误替换错误”,而是将空值分配给“ value”。 但是在Ubuntu 18.04中,它显示“错误的替换错误”并停止工作。 我希望它能像Ubuntu 16.04一样工作。
答案 0 :(得分:0)
我已经用bash 4.3.46复制了rextester并使用bash 4.4.12复制了tutorialspoint的问题。
我看到了三个选项:
value=""; # first assign empty value
{ value=${!name}; } 2>/dev/null ||: # this doesn't do anything if !name is invalid
isValidVarName() {
echo "$1" | grep -q '^[_[:alpha:]][_[:alpha:][:digit:]]*$' && return || return 1
}
if isValidVarName "$name"; then
value=${!name}
else
value=""
fi