打印001,002,...,099,100代替1,2,3,...,99,100

时间:2018-08-17 12:20:23

标签: bash command-line

我要打印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。 有谁知道我该如何解决?

3 个答案:

答案 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也可以。