为什么使用 seq -s 分隔符在最后一个元素之后?

为什么使用 seq -s 分隔符在最后一个元素之后?

我使用命令尝试了 Unix shell 教程中的不同示例seq,并在终端中得到了不同的结果。

命令:

seq -s '/' 1 5

结果:

1/2/3/4/5/

代替

1/2/3/4/5

该命令在 online 中按预期工作bash,只有我的方式不同。

答案1

macOS 上默认安装的非标准实用程序的实现seq与 GNU 系统上 coreutils 包中的实现不同。苹果系统seq来自 FreeBSD

-s在 macOS 上,用作 选项的选项参数的字符串seq将替换通常用于此目的的默认换行符。这意味着每个数字后面都跟有 的字符串-s,包括最后一个数字。要在末尾插入换行符,您可以使用-t '\n'(该-t选项在 GNU 中不可用seq)。请注意,这仍然-s在最后一个数字后面添加分隔符:

$ seq -s '-->' -t '[end of list]\n' 1 3
1-->2-->3-->[end of list]

在 coreutilsseq实现中,使用 with 的字符串-s来分隔数字,但最后一个元素始终以换行符终止。

两种seq实现的这种差异可能是由于开发人员的偏好和/或需求造成的,但这只是我的猜测。

在 macOS 上,您可以使用 Homebrew 安装 coreutils,并seqgseq.

相关内容