我以各种顺序迭代数字。我能够以递增的顺序显示它们,即使是这样的步骤:
$ seq --separator="," 1 10
1,2,3,4,5,6,7,8,9,10
$ seq --separator="," 1 2 10
1,3,5,7,9
Run Code Online (Sandbox Code Playgroud)
我也能够以相反的顺序显示它们,既不是连续的也不是逐步的。
$ seq --separator="," 10 1
$ seq --separator="," 10 2 1
Run Code Online (Sandbox Code Playgroud)
上述命令没有输出。
我的外壳详细信息:
$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)
让我知道如何以降序显示数字?
Chr*_*own 26
通常,您不想使用seq,它不可移植(即使在标准 Linux 环境中也是如此)。如果您使用 ksh、zsh 或 bash4+,则可以使用大括号扩展:
echo {10..1..2} | tr " " ,
10,8,6,4,2
Run Code Online (Sandbox Code Playgroud)
rus*_*ush 15
纯 bash、ksh 或 zsh 的另一种方式:
for ((i=10;i>0;i-=2)) ; do echo -n "$i," ; done
Run Code Online (Sandbox Code Playgroud)
纯 POSIX sh 方式:
i=10
while [ "$i" -gt 2 ]; do printf "$i,"; i=$((i-2)); done
echo "$i"
Run Code Online (Sandbox Code Playgroud)
现在,标准 POSIX 的:
awk 'BEGIN{for (i = 10; i > 0; i -= 2) print i}' | paste -sd , -
Run Code Online (Sandbox Code Playgroud)
(有趣的是,mawk(并且在较小程度上gawk)比 GNU 快得多seq,i = 10000000而不是i = 10)
或者
i=10; set --
while [ "$i" -gt 0 ]; do
set -- "$@" "$i"
i=$(($i - 2))
done
IFS=,
echo "$*"
Run Code Online (Sandbox Code Playgroud)
(只会在迭代次数较少时更有效,尤其是使用bash)
或者
echo 'for(i=10;i>0;i-=2) i' | bc | paste -sd , -
Run Code Online (Sandbox Code Playgroud)
(这将支持任何大小的数字,但请注意,超过一定数量的数字(至少在 POSIX 语言环境中大于 10 70的数字),行将用反斜杠包裹)
小智 5
尝试:
seq [OPTION]... FIRST INCREMENT LAST
Run Code Online (Sandbox Code Playgroud)
例子:
$ seq 10 -1 1