seq 同时使用逗号和点作为小数分隔符

seq uses both comma and dot as a decimal separator

来自 this 回答我正在尝试使用点作为小数点分隔符输出一系列数字。

这个有效:

$ LANG=en_US seq 0.1 0.1 0.8
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8

$ LANG=en_US seq 0.1 0.1 1.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0

但事实并非如此:

$ LANG=en_US seq 0.1 0.1 0.9
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0,9

为什么?我该如何解决?

这可能是因为 LANG 变量设置了语言环境设置并导致 seq 表现如此。目前还不清楚 为什么 但要修复它 EXPLICITLY 你可以我们 tr。例如。

$ LANG=en_US seq 0.1 0.1 0.9 | tr "," "."
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9

为了防止任何 区域设置(例如LC_NUMERIC,这里可能是罪魁祸首)影响行为:

LC_ALL=C seq 0.1 0.1 0.9

也就是说,我根本不建议使用 seq。这是一个非标准命令,不保证在所有 UNIX 平台上都可用,或者在 可用时具有任何特定行为。一个具有浮点能力的替代方案,考虑 awk:

LC_ALL=C awk -v min=0.1 -v max=0.9 -v inc=0.1 \
  'BEGIN { cur=min; while (cur <= max) { print cur; cur += inc; }; exit; }'