【问题标题】:evaluating a string as a partial bash command将字符串评估为部分 bash 命令
【发布时间】:2017-07-06 01:52:33
【问题描述】:

我正在用 bash 编写一个脚本,它从文件 next-version=2.0 中读取这一行,我想提取 2.0。我可以将它解析为一个数组并在= 上拆分它,但这感觉有点矫枉过正。如果我运行export $VERSION,它在逻辑上应该变成export next-version=2.0,然后我可以用$next-version 取消引用。相反,我得到 bash: export: `next-version=2.0': not a valid identifier

所以我尝试了VERSION="export $VERSION",它的计算结果为export next-version=2.0 GREAT,所以当我运行eval $VERSION 或$VERSION 时,我得到了同样的错误。我认为 next-version=2.0 以某种方式保持它是一个字符串的事实?我认为它从小写字母读取可能只是令人不安,但是当我使用 NEXT-VERSION 重复该过程时,结果相同。

【问题讨论】:

  • 这并不过分,因为有问题的字符串不是有效的bash 赋值语句。你唯一能做的就是解析它。

标签: string bash scripting


【解决方案1】:

这是-

尝试 $ export STRING-SS=asd bash: export: `STRING-SS=asd': not a valid identifier

将next-version 更改为NEXTVERSION、NEXT_VERSION、next_version 或nextversion。

【讨论】:

    【解决方案2】:

    bash 中的函数或命令名称可以包含 -,但不能包含参数名称。这意味着next-version=2.0 不是bash 中的有效赋值,因为= 之前的字符串必须是有效名称。您唯一能做的就是按照您的描述解析它,尽管不需要数组。

    IFS== read -r name value <<< "$str"
    

    或

    value="${str#*=}"   # Strip the prefix up to and including the first =
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2013-08-16
      • 2023-04-09
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多