【问题标题】:How to fix following error in Ubuntu 18.04?如何修复 Ubuntu 18.04 中的以下错误?
【发布时间】:2019-12-18 06:34:05
【问题描述】:

我有一个在 Ubuntu 16.04 中运行良好的 bash 脚本文件,但自从我升级到 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} 不会发生“错误替换错误”,它会将空值分配给“值”。 但在 Ubuntu 18.04 中,它显示“替换错误”并停止工作。 我希望它像在 Ubuntu 16.04 中一样工作。

【问题讨论】:

  • 请在 ubuntu 16.04 和 18.04 上发布 bash 版本。它们有什么不同吗?
  • Ubuntu 16.04 GNU bash 版本 4.3.48(1)-发布 Ubuntu 18.10 GNU bash 版本 4.4.19(1)-发布
  • 它在 Ubuntu 18.04 (With bash 4.4.20) 上一直为我工作

标签: shell ubuntu substitution


【解决方案1】:

我已经用 bash 4.3.46 和tutorialspoint 用 bash 4.4.12 复制了这个问题。

我看到了三个选项:

  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

【讨论】:

  • 如何降级 bash 版本? bash 版本降级很危险,很少使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多