Как напечатать массив bash в одной строке

Я читаю данные типа файла в массив bash и должен распечатать его содержимое на той же строке с пробелами.

#!/bin/bash

filename=
declare -a myArray

readarray myArray < 

echo "${myArray[@]}" 

Я пробую это и даже с флагом echo-n он все еще печатает на новых линиях, что мне не хватает, будет ли printf работать лучше?

6 ответов


readarray сохраняет конечную новую строку в каждом элементе массива. Чтобы раздеть их, используйте .

readarray -t myArray < ""

простой способ печати в одну строку

echo "${myArray[*]}"

пример:

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

echo "${myArray[*]}"

#Result
one two three four five

одним из способов :

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

или просто :

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

мой любимый трюк-это

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


если у вас есть элементы массива, поступающие из входных данных, вот как вы можете

  • создать массив
  • добавить элементы к нему
  • затем распечатайте массив в одной строке

сценарий:

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

решение@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