使用printf打印没有空格的数组元素

时间:2014-05-07 21:23:09

标签: arrays bash printf echo

我可以在循环中使用echo打印我的数组元素,但输出格式非常糟糕。在那里我尝试了注入标签但是元素之间只有很多空格,因为每个元素的长度都不同。我不知道如何使用printf?我试过了,但它没有正常工作。有没有办法格式化我的printf或echo所以我在每个元素之间有相同数量的空格?这让我很生气。

while [[ $counter -lt $nai ]];
do
#echo ${slist[$counter]} $'\t' ${sstate[$counter]} $'\t' $'\t' ${scached[$counter]}
printf ${slist[$counter]} $'\t' ${sstate[$counter]} $'\t' $'\t' ${scached[$counter]}
counter=$(( $counter + 1 ))
done

简而言之,我只想在元素之间以相同数量的空格打印我的元素,就像这样

  abc  cdf  efg

我得到的是

  abc       cdf            efg

由于

2 个答案:

答案 0 :(得分:1)

尝试使用printf格式字符串

printf "%s  %s  %s\n" ${slist[$counter]} ${sstate[$counter]} ${scached[$counter]}

如果字段没有空格,请使用column -t

{
echo my dog has fleas
echo some random words here
} | column -t
my    dog     has    fleas
some  random  words  here

或者,在您的情况下:while ...; do ...; done | column -t

答案 1 :(得分:1)

如果要打印它们之间有N个空格的元素,可以使用printf:

a="foo"
b="somestring"
c="bar"

# Print each argument with three spaces between them
printf "%s   " "$a" "$b" "$c"
# Print a line feed afterwards
printf "\n"

这导致:

foo   somestring   bar
otherdata   foo   bar

您还可以使用格式%-12s将每个元素填充为12个字符:

# Pad each field to 12 characters
printf "%-12s" "$a" "$b" "$c"
printf "\n"

导致:

foo         somestring  bar         
otherdata   foo         bar