在 seq 命令分隔符中插入转义字符

在 seq 命令分隔符中插入转义字符

如何插入包含转义字符(\n、\t 等)的字符串作为命令的分隔符seq

标准格式包含换行符:

    $ seq 3
    1
    2
    3

但是如果我尝试添加一些内容加上换行符,反斜杠会被转义,而使用文字“\n”:

    $ seq -s "$\n" 3
    1\n2\n3

使用简单引号、无引号或其他转义字符也会发生同样的情况:

    $ seq -s "\t" 3
    1\t2\t3

    $ seq -s \t 3
    1t2t3

这不是诸如此类的命令的标准行为echo,所以我有点困惑......

编辑:理想情况下,我想要一个有点可移植的解决方案(例如,在 和 中都能正常工作tschbash,而不需要借助 Perl 或其他语言。

答案1

在 中bash,无需尝试输入换行符作为转义序列,只需按 Enter 键将其作为换行符输入到引号字符串的中间即可。例如,

bash-4.1$ seq -s "$
> " 3
1$
2$
3
bash-4.1$

答案2

要获取制表符和其他奇怪的字符,您还可以尝试以下操作:

$ seq -s "$(echo -e '\t')" 3
1   2   3
$ seq -s "$(echo -e '\n$')" 3
1
$2
$3

答案3

至少在 bash 中,您可以使用像在 ANSI C 中一样通过使用格式来解释的字符串$'string'(这些必须是单引号)。

seq -s $'$\n' 3
1$
2$
3

tcsh不幸的是,抱怨变量名非法。

答案4

seq -s "$(echo -e '\n')" 3不起作用。可能的解决方案:seq -s "$(echo -e '\n\r')" 3 | tr -d '\r'

相关内容