2017-02-16 68 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