给定一个值为语义版本的shell变量,如何创建另一个shell变量,其值为(tuple 1×1000000) + (tuple 2×1000) + (tuple 3)?
例如。
$ FOO=1.2.3
$ BAR=#shell magic that, given ${FOO} returns `1002003`
# Shell-native string-manipulation? sed? ...?我不清楚POSIX遵从性与shell特定语法是如何起作用的,但我认为首选不是bash特定的解决方案。
Update:澄清:这并不像用0(Es)替换".“那么简单,这是我最初的想法。
例如,1.12.30的期望输出是1012030,而不是100120030,这是.-replacement方法可能提供的。
如果答案可以是一元线性变量赋值,则奖励。
发布于 2021-04-30 00:13:59
发布于 2021-04-29 23:53:54
在点上分开,然后循环和乘/加:
version="1.12.30"
# Split on dots instead of spaces from now on
IFS="."
# Loop over each number and accumulate
int=0
for n in $version
do
int=$((int*1000 + n))
done
echo "$version is $int"请注意,这对1.2和0.1.2是相同的。如果您希望始终将第一个数字作为主要的/百万,请考虑预先填充/截断。
发布于 2021-04-29 23:31:57
这样就行了
echo $foo | sed 's/\./00/g'https://stackoverflow.com/questions/67326000
复制相似问题