无法在 bash 脚本中打印点字符

Cannot print dot character in a bash script

我有一个脚本可以修改 package.json 的一个版本。我可以使用此脚本更改版本,但我在打印变量时遇到问题,我期望“1.2.3”,但得到“1 2 3”。

#!/bin/bash 

# Split string by '.'
IFS='.'
read -r -a array <<< "1.1.3"
array[1]=$((array[1]+1))

VERSION="${array[0]}.${array[1]}.${array[2]}"
echo $VERSION
# 1 2 3

VERSION=`printf "%i.%i.%i" "${array[0]}" "${array[1]}" "${array[2]}"`
echo $VERSION
# 1 2 3

echo $(jq -r '.version = "'"$VERSION"'" ' package.json)
# packaje.json -> "version": "1 2 3"

我在这里错过了什么?

这是因为您为整个脚本设置了 IFS,而不仅仅是需要它的一个命令。请尝试 IFS='.' read […]

另外,如果你 Use More Quotes™ 就不会遇到这个问题,因为输出不会被 $IFS 拆分。

您只是缺少引号。 shell 正在拆分 VERSION。在将参数传递给 echo 之前。

$ VERSION=1.2.3
$ echo $VERSION
1.2.3
$ IFS=.
$ echo $VERSION
1 2 3
$ echo "$VERSION"
1.2.3