这是在 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 格式字符串,并且索引和值作为单独的参数传递。