我要打印2个以下格式的数字: 001,002,003,...,015,016,017,...,098,099,100
for i in touch {001..100}; do
for j in touch {001..100}; do
if (( $j > $i )); then
echo $i $j
fi
done
done
循环完成了我想要的工作。
但是问题是它打印时不带0。例如,它打印1 2、1 3、1,4,...,99 100。 我希望它打印001002、001003、001004,...,099100。 有谁知道我该如何解决?
答案 0 :(得分:3)
一种可能性是使用printf:
for i in {1..100}; do
for j in {1..100}; do
if (( $j > $i )); then
printf "%03d %03d\r\n" $i $j
fi
done
done
答案 1 :(得分:3)
在bash
4中添加了前导零的保留;您似乎使用的是bash
的旧版本。但是,如果保留0 ,则必须调整比较以避免将值视为八进制数。 (例如,090
是无效的八进制数字。)
for i in {001..100}; do
for j in {001..100}; do
if (( 10#$j > 10#$i )); then
echo $i $j
fi
done
done
最好将printf
与C样式的for
循环一起使用。
for ((i=1; i < 101; i++)); do
for ((j=i+1; j < 101; j++)); do
printf '%03d %03d\n' "$i" "$j"
done
done
请注意,没有比较;内部循环以大于j
的值开始i
。
答案 2 :(得分:-1)
使用seq
:
for i in touch $(seq -w 1 100); do
for j in touch $(seq -w 1 100); do
if (( $j > $i )); then
echo $i $j
fi
done
done
printf
也可以。