【问题标题】:bash shell script concatenate string with period charbash shell脚本将字符串与句点字符连接起来
【发布时间】:2016-05-07 08:40:18
【问题描述】:

我正在尝试创建以下字符串

Beta-3.8.0

但无论我做什么,shell 脚本总是忽略. 句点字符。

echo "$readVersion"

if [ -z $readVersion ]
then
    echo "readVersion is empty"
    exit 1
fi;

IFS=.
set $readVersion
newVersion=$(echo "$2 + 1" | bc)
newBranch="Beta-$1.$newVersion.$3"
echo $newBranch

打印:
3.8.0
Beta-3 9 0

我也试过

newBranch='Beta-'$1'.'$newVersion'.'$3
or
newBranch="Beta-{$1}.{$newVersion}.{$3}"

虽然这似乎打印了正确的值echo "$1.$newVersion.$3" 为什么不变量不起作用?

我需要稍后在脚本中使用该变量...

【问题讨论】:

  • 双引号你的变量。
  • 您设置了“IFS=”。所以论点(回声)在点处分裂。重置 IFS,echo 就可以了。将你的论点用双引号括起来,你会没事的。变量包含点;只是您修改了 IFS(出于某种目的)并且在该目的结束后没有恢复它——这就是让您感到悲伤的原因。
  • 你为什么使用set?只需在您当前使用$1 的地方使用"$readVersion"
  • 有关未能引用变量的后果的更多血腥/可怕细节,请阅读unix.stackexchange.com/q/171346/4667

标签: string bash shell integer echo


【解决方案1】:

完成后,您可以保存和恢复IFS

oldIFS=$IFS
IFS=.
set $readVersion
newVersion=$(echo "$2 + 1" | bc)
IFS=$oldIFS
newBranch="Beta-$1.$newVersion.$3"
echo "$newBranch"

或者你可以在打印时引用:

echo "$newBranch"

前者是 IMO 更好的主意,因为它传达了您的意图,并使其余代码使用“正确”的 IFS。后者只是规避了问题。

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多