【问题标题】:Bash: How to separate array elements with tabs - and print on the same line? [duplicate]Bash:如何用制表符分隔数组元素 - 并在同一行打印? [复制]
【发布时间】: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[@]}"

标签: arrays linux bash


【解决方案1】:

为什么不使用“tr”?

my_array={1,2,3,4}
echo $my_array | tr "," "\t"

结果:

{1      2       3       4}

如果:

my_array=(1,2,3,4)
echo $my_array | tr "," "\t"

结果:

1       2       3       4

【讨论】:

  • 嗯...对我不起作用。第一个元素打印,其余的根本不打印。
  • 还有其他人有想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
相关资源
最近更新 更多