2017-02-16 70 views
0

我正在写一个脚本在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评估字符串作为部分bash命令

所以,我想VERSION="export $VERSION"计算结果为export next-version=2.0很大,所以当我运行eval $VERSION$VERSION我得到了同样的错误。我认为next-version = 2.0在某种程度上保持了它是一个字符串的事实?我认为它可能会让人感到沮丧,因为它是从小写字母读取的,但是当我用NEXT-VERSION重复该过程时,结果相同。

+0

这不是矫枉过正,因为有问题的字符串不是有效的'bash'赋值语句。你*可以做的唯一事情就是解析它。 – chepner

回答

1

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

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

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

这是-

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

变化next-versionNEXTVERSIONNEXT_VERSIONnext_versionnextversion