如何插入包含转义字符(\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
,所以我有点困惑......
编辑:理想情况下,我想要一个有点可移植的解决方案(例如,在 和 中都能正常工作tsch
)bash
,而不需要借助 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'