如何在同一行上打印bash数组

时间:2016-10-11 19:58:43

标签: arrays bash printf echo

我正在将文件类型数据读入bash数组,需要在与空格相同的行上打印出来。

#!/bin/bash

filename=$1
declare -a myArray

readarray myArray < $1

echo "${myArray[@]}" 

我尝试这个,即使使用echo -n标志它仍然会在换行符上打印,我缺少什么,printf会更好吗?

6 个答案:

答案 0 :(得分:17)

以一行打印的简单方法

echo "${myArray[*]}"

示例:

myArray=(
one
two
three
four
[5]=five
)

echo "${myArray[*]}"

#Result
one two three four five

答案 1 :(得分:6)

readarray保留每个数组元素中的尾部换行符。要剥离它们,请使用-t选项。

readarray -t myArray < "$1"

答案 2 :(得分:2)

一种方式:

printf '%s\n' "${myArray[@]}" | paste -sd ' '

或简单地说:

printf '%s ' "${myArray[*]}"

答案 3 :(得分:1)

如果你有来自输入的数组元素,你可以这样做

  • 创建一个数组
  • 向其添加元素
  • 然后用一行打印数组

剧本:

#!/usr/bin/env bash

declare -a array
var=0
while read line
do
  array[var]=$line
  var=$((var+1))
done

# At this point, the user would enter text. EOF by itself ends entry.

echo ${array[@]}

答案 4 :(得分:1)

我最喜欢的技巧是

echo $(echo "${myArray[@]}")

答案 5 :(得分:0)

@ sorontar在评论中发布的解决方案很方便:

printf '%s ' "${myArray[@]}"

但在某些地方,领先的空间是不可接受的,所以我实现了这个

local str
printf -v str ' %s' "${myArray[@]}"  # save to variable str without printing
printf '%s' "${str:1}"  # to remove the leading space