不是重复的问题。
我正在尝试从具有 1,0,0 作为元素的数组创建 semvar 模式 (1.0.0) 并创建一个 git 标签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
echo $var
我猜是执行和git tag $var
使用的shell IFS=.
。注意var=$(IFS=.;…)
无法更改当前 shell 中的变量值,因此这个意外IFS
肯定是之前设置的,可能是在一些试验和错误过程中设置的。
如果我没记错的话,变量名为 ,var
它保存的是带点的预期值,例如1.0.0
。但是当你像这样检索它时
echo $var
当前IFS
用于拆分1.0.0
成单词,因此echo
接收三个单独的参数:1
,0
,0
。并且因为echo
打印的参数之间带有单个空格,所以你会觉得 的值var
是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