2016-10-11 18 views
5

Czytam dane typu pliku do tablicy bash i trzeba wydrukować jego zawartość na tym samym wierszu spacjami.Jak wydrukować tablicę bash na tej samej linii

#!/bin/bash 

filename=$1 
declare -a myArray 

readarray myArray < $1 

echo "${myArray[@]}" 

próbuję to i nawet z echo -n nadal drukuje na nowej linii, co mam brakuje, by printf pracę lepiej?

Odpowiedz

4

readarray zachowuje ciągnący znak nowej linii w każdym elemencie tablicy. Aby je rozebrać, użyj opcji -t.

readarray -t myArray < "$1" 
2

Jednym ze sposobów:

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

lub po prostu:

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

Korzystanie * zależy od pierwszego znaku „$ IFS”, który domyślnie Zdarza się przestrzeń. Użycie 'printf '% s'" $ {myArray [@]} "' jest bardziej niezawodne. – sorontar

0

w przypadku gdy masz elementy tablicy pochodzące z wejścia, to jak można

  • tworzyć tablica
  • dodać elementy do niego
  • następnie wydrukować tablicy w jednej linii

Skrypt:

#!/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

Nie mogę sformatować części kodu jako kodu. Ktoś pomoże. –

8

prosty sposób drukować jedna linia

echo "${myArray[*]}" 

przykład:

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

echo "${myArray[*]}" 

#Result 
one two three four five 
+0

Co jeśli chciałbym sformatowanego wyjścia (np. Rozdzielona przecinkami lista pojedynczych cudzysłowów) – Prachi

+1

@Prachi Użyj tego 'echo $ (IFS = ','; echo" $ {myArray [*] ///|} "; IFS = $ '') ', link https://stackoverflow.com/a/13471141/5287072 – DarckBlezzer

Powiązane problemy