Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用printf打印无空白的数组元素_Arrays_Bash_Printf_Echo - Fatal编程技术网

Arrays 使用printf打印无空白的数组元素

Arrays 使用printf打印无空白的数组元素,arrays,bash,printf,echo,Arrays,Bash,Printf,Echo,我可以在循环中使用echo打印阵列元素,但输出格式非常糟糕。在这里,我尝试注入tab,但是元素之间有很多空格,因为每个元素的长度都不同。我不知道如何使用printf?我试过了,但就是不能正常工作。有没有办法格式化printf或echo,使每个元素之间的空格数相等?这让我快发疯了 while [[ $counter -lt $nai ]]; do #echo ${slist[$counter]} $'\t' ${sstate[$counter]} $'\t' $'\t' ${scached[$co

我可以在循环中使用echo打印阵列元素,但输出格式非常糟糕。在这里,我尝试注入tab,但是元素之间有很多空格,因为每个元素的长度都不同。我不知道如何使用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

谢谢

尝试将格式字符串与printf一起使用

printf "%s  %s  %s\n" ${slist[$counter]} ${sstate[$counter]} ${scached[$counter]}
如果字段没有空格,请使用
列-t

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

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

如果要打印元素之间有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

也许这会对你有所帮助:@Martin
“你的打印声明”| tr-s''
检查这是否有效,谢谢它更好。。间隔相等。。但由于元素的长度不相等,因此它们没有正确对齐。有没有办法使它们正确对齐?答案已更新。显示多行示例输入可能会有所帮助。
foo         somestring  bar         
otherdata   foo         bar