如何修复Ubuntu 18.04中的以下错误?

时间:2019-08-11 08:01:06

标签: shell ubuntu substitution

我有一个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一样工作。

1 个答案:

答案 0 :(得分:0)

我已经用bash 4.3.46复制了rextester并使用bash 4.4.12复制了tutorialspoint的问题。

我看到了三个选项:

  1. 降级您的bash版本。这看起来像是较早的bash版本中已修复的错误。
  2. 忽略错误消息并将其重定向为null。

value="";                              # first assign empty value
{ value=${!name}; } 2>/dev/null ||:    # this doesn't do anything if !name is invalid
  1. 您可以编写一个if。并编写正确的代码,切勿取消引用其中包含无效变量名称的变量。

isValidVarName() {
    echo "$1" | grep -q '^[_[:alpha:]][_[:alpha:][:digit:]]*$' && return || return 1
}
if isValidVarName "$name"; then
    value=${!name}
else
    value=""
fi