我可以在循环中使用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
由于
答案 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