2016-10-11 3 views
5

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

#!/bin/bash 

filename=$1 
declare -a myArray 

readarray myArray < $1 

echo "${myArray[@]}" 

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

ответ

4

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

readarray -t myArray < "$1" 
2

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

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

или просто:

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

Использование * зависит от первого символа «$ IFS», который по умолчанию это случается пространством. Использование 'printf '% s'" $ {myArray [@]} "' более надежное. – sorontar

0

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

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

Сценарий:

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

Я не могу отформатировать часть кода как код. Кто-то помогает. –

8

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

echo "${myArray[*]}" 

пример:

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

echo "${myArray[*]}" 

#Result 
one two three four five 
+0

Что делать, если мне нужен форматированный вывод (например, список одиночных кавычек, разделенных запятыми) – Prachi

+1

@Prachi Используйте этот 'echo $ (IFS = ','; echo" $ {myArray [*] ///|} "; IFS = $ '') ', ссылка https://stackoverflow.com/a/13471141/5287072 – DarckBlezzer