將 bash 數組變數轉換為以“.”分隔的字串?

將 bash 數組變數轉換為以“.”分隔的字串?

不是重複的問題

我正在嘗試從具有 1,0,0 作為元素的陣列製作 semvar 模式(1.0.0)並建立一個 git tag git tag $var

錯誤:- 上述解決方案僅不適用於.,它給出1 0 0, 空格分隔。

4 13 0
fatal: too many params

git tag 指令出錯。

方法:-

var=$( IFS=$'.'; echo "${versionArray[*]}" )
echo $var
git tag $var  

請建議一個更好的方法來做到這一點。

答案1

我的猜測是 shell也執行echo $vargit tag $var使用。IFS=.注意var=$(IFS=.;…)無法變更目前 shell 中的變數值,因此IFS必須提前設定此意外值,可能是在某些試驗和錯誤期間設定的。

如果我是對的,則名為 的變數var將包含帶點的預期值,例如1.0.0。但是當你像這樣檢索它時

echo $var

currentIFS用來分割1.0.0成單字,因此echo接收三個單獨的參數:1, 0, 0。而且因為echo列印其參數時中間有一個空格,所以您的印像是varwas的值1 0 0

這條線

echo "$var"

不依賴IFS.我希望它會告訴你1.0.0


一般的解決方案是使用雙引號變數。你無論如何應該這樣做:

echo "$var"
git tag "$var"

還要注意IFS。現在應該很清楚echo $IFS不會告訴你變數是什麼;echo "$IFS"更好。此外,這些方法也很有用:

printf '%s' "$IFS" | hexdump -c
printf '%s' "$IFS" | hexdump -C
printf '%s' "$IFS" | xxd

相關內容