How to print a bash array on the same line

2020-02-06 06:27发布

问题:

I am reading in filetype data into a bash array and need to print its contents out on the same line with spaces.

#!/bin/bash

filename=$1
declare -a myArray

readarray myArray < $1

echo "${myArray[@]}" 

I try this and even with the echo -n flag it still prints on newlines, what am I missing, would printf work better?

回答1:

readarray retains the trailing newline in each array element. To strip them, use the -t option.

readarray -t myArray < "$1"


回答2:

Simple way to print in one line

echo "${myArray[*]}"

example:

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

echo "${myArray[*]}"

#Result
one two three four five


回答3:

One way :

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

or simply :

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


回答4:

My favourite trick is

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



回答5:

In case you have the array elements coming from input, this is how you can

  • create an array
  • add elements to it
  • then print the array in a single line

The script:

#!/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[@]}


回答6:

@sorontar's solution posted in a comment was handy:

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

but in some places the leading space was unacceptable so I implemented this

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