Bash & Printf:我怎样才能同时右填充和截断?

Bash & Printf: How can I both right pad and truncate?

在Bash ...

我知道如何用 printf 右填充

printf "%-10s" "potato"

我知道如何用 printf 截断

printf "%.10s" "potatos are my best friends"

如何同时进行这两项操作?

LIST="aaa bbbbb ccc ddddd"
for ITEM in $LIST; do
  printf "%-.4s blah" $ITEM
done

这会打印

aaa blah
bbbbb blah
ccc blah
ddddd blah

我要打印

aaa  blah
bbbb blah
ccc  blah
dddd blah

我不想做这样的事情(除非别无选择):

LIST="aaa bbbbb ccc ddddd"
for ITEM in $LIST; do
  printf "%-4s blah" $(printf "%.4s" "$ITEM")
done

不过,显然,这行得通(感觉很丑陋而且很老套)。

您可以使用 printf "%-4.4s 在输出中获取两种格式:

for ITEM in $LIST; do printf "%-4.4s blah\n" "$ITEM"; done
aaa  blah
bbbb blah
ccc  blah
dddd blah