it-swarm.com.ru

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

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

#!/bin/bash

filename=$1
declare -a myArray

readarray myArray < $1

echo "${myArray[@]}" 

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

7
Alec Beyer

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

readarray -t myArray < "$1"
6
chepner

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

echo "${myArray[*]}"

пример:

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

echo "${myArray[*]}"

#Result
one two three four five
15
DarckBlezzer

В одну сторону :

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

или просто:

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

Мой любимый трюк 

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

1
user1699917

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

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

Сценарий:

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

Решение @ 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 
0
Buoy