要创建列标题,如下所示:
1234567890123456789
Run Code Online (Sandbox Code Playgroud)
我(正在尝试)使用 seq 和 echo:
seq -s '' 1 9 ; echo -n 0; seq -s '' 1 9
Run Code Online (Sandbox Code Playgroud)
但是, seq 在每次运行后都会输出一个换行符。我怎样才能避免这种情况?
ter*_*don 10
假设你只想打印1234567890123456789
,你可以这样做:
$ printf "%s" $(seq 1 9) $(seq 0 9)
1234567890123456789$
Run Code Online (Sandbox Code Playgroud)
不过,那根本没有尾随换行符,所以也许您更喜欢:
$ printf "%s" $(seq 1 9) $(seq 0 9) $'\n'
1234567890123456789
$
Run Code Online (Sandbox Code Playgroud)
如果您不需要使用一些更简单的选择seq
:
$ perl -le 'print 1..9,0,1..9'
1234567890123456789
$ printf "%s" {1..9} {0..9} $'\n'
1234567890123456789
Run Code Online (Sandbox Code Playgroud)
既然你提到的可移植性,我建议你使用perl
的方法,或者如果你很可能会遇到系统没有perl
,然而需要同样的命令,在运行炮弹包括bash
,sh
,dash
,tcsh
等,试图卡米尔的做法。
您可以从任何流中删除换行符tr -d '\n'
。在你的情况下
(seq -s '' 1 9 ; echo -n 0; seq -s '' 1 9) | tr -d '\n'
Run Code Online (Sandbox Code Playgroud)
虽然其他答案可能专注于修改您的原始方法,但这种方法应该只删除换行符,而不管之前是什么|
。
我假设您不仅想要那个特定的字符串,还想要长度可变的递增数字字符串。为此,能够通过更改一个数字来更改宽度可能很有用,而不必通过多次调用来构建它seq
。
在 Bash 中,你可以使用这样的东西(对于 19 长的序列):
for ((i=1; i <= 19; i++)); do printf "%d" "$(( i % 10 ))"; done; echo
Run Code Online (Sandbox Code Playgroud)
这应该在标准 shell 中工作(并且至少可以在 dash 和 busybox 中工作):
i=1; while [ "$i" -le 19 ]; do printf "%d" "$(( i % 10 ))"; i=$((i+1)); done; echo
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1357 次 |
最近记录: |