将 bash 数组变量转换为以“。”分隔的字符串?

将 bash 数组变量转换为以“。”分隔的字符串?

不是重复的问题

我正在尝试从具有 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接收三个单独的参数:100。并且因为echo打印的参数之间带有单个空格,所以你会觉得 的值var1 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

相关内容