将字符串计算为部分bash命令

时间:2017-02-16 19:09:57

标签: string bash scripting

我正在用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相同的结果重复这个过程时。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

这是-

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

next-version更改为NEXTVERSIONNEXT_VERSIONnext_versionnextversion