【发布时间】:2019-06-22 11:16:05
【问题描述】:
我在 bash 中有一个数组...比如说 my_array:
my_array={1,2,3,4}
为此我需要两个要求: 1) 在同一行打印所有这些元素,2) 用制表符分隔每个元素。
当我打印出元素时,输出应该是这样的:
1 2 3 4
元素之间的每个“间隙”都是一个选项卡。
任何有关如何执行此操作的建议将不胜感激。谢谢。
编辑 到目前为止,这是我尝试过的:
1) 我知道我可以在同一行打印出一个数组:
echo {my_array[*]}
2) 为了获得所需的选项卡,我尝试制作一个只有一个选项卡的变量,并将其添加到每个元素之间的数组中:
temp=" "
for(...)
do
((my_array+=$i))
((my_array+=$temp))
done
然而,这给了我一个错误。
编辑 2 Inan提供的解决方案
这行得通:
printf '%s\t' "${my_array[@]}"
但是,这里有几件事;在最后一个元素之后,如何删除最后一个选项卡?
【问题讨论】:
-
到目前为止你尝试了什么?
-
我会把它放在 EDIT 中 - 抱歉,我完全忘记了这部分。
-
@DarrelGulseth:您的意思是在数组元素之间或打印时添加
\t? -
@Inian,您提供的解决方案确实有效。但是,我还有两个担忧:我将如何摆脱最后一个选项卡(我不希望最后一个元素之后的选项卡)。在数组打印完成后,我还想要一个新行。
-
@DarrelGulseth:使用链接副本中投票最多的答案。执行
join_by() { local IFS="$1"; shift; echo "$*"; }并将数组定义为arr=(1 2 3 4)并将函数调用为join_by $'\t' "${arr[@]}"