
不是重複的問題。
我正在嘗試從具有 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 $var
和git tag $var
使用。IFS=.
注意var=$(IFS=.;…)
無法變更目前 shell 中的變數值,因此IFS
必須提前設定此意外值,可能是在某些試驗和錯誤期間設定的。
如果我是對的,則名為 的變數var
將包含帶點的預期值,例如1.0.0
。但是當你像這樣檢索它時
echo $var
currentIFS
用來分割1.0.0
成單字,因此echo
接收三個單獨的參數:1
, 0
, 0
。而且因為echo
列印其參數時中間有一個空格,所以您的印像是var
was的值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