打印数字递增的值

打印数字递增的值

这是在 bash 中使用 printf 打印数值递增值的正确方法吗?

  for (( i=0 ; i < $nf ; i++ )); do
    printf ' %s %s\n' "$((i + 1)). ${fdir[$i]}"
  done

答案1

这是可能的,但我可能会使用稍微不同的版本:

for (( i=1 ; i <= nf ; i++ )) ; do
    printf ' %d. %s\n' "$i" "${fdir[i-1]}"
done
  • 用于%d数字,而不是%s(您甚至可以使用%2d它来对齐点);
  • printf使用两个%s(或一个%d和一个%s)应该获得两个要打印的参数,而不是一个;
  • 点应该放在格式中,以便参数尽可能简单;
  • 数组索引已经是一个数值表达式,无需再引入$((...))

答案2

假设您正在尝试打印整个数组(即$nf等于${#fdir[@]}),另一个可能更惯用的选项是使用!间接运算符直接循环遍历数组的索引,而不是使用 C 样式循环:

for i in "${!fdir[@]}"; do printf '%d. %s\n' "$((i+1))" "${fdir[i]}"; done

与其他答案一样,.被移入 printf 格式字符串,并且索引和值作为单独的参数传递。

相关内容