我正在用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
相同的结果重复这个过程时。
答案 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
更改为NEXTVERSION
,NEXT_VERSION
,next_version
或nextversion
。