2016-10-11 7 views
5

Ich lese in Dateityp Daten in eine Bash-Array und muss seinen Inhalt in der gleichen Zeile mit Leerzeichen drucken.Wie drucke ich eine Bash-Array auf der gleichen Zeile

#!/bin/bash 

filename=$1 
declare -a myArray 

readarray myArray < $1 

echo "${myArray[@]}" 

Ich versuche, diese und auch mit dem Echo -n es immer noch auf neue Zeilen druckt, was mir fehlt, würde besser funktionieren printf?

Antwort

4

readarray behält den abschließenden Zeilenumbruch in jedem Array-Element. Um sie zu entfernen, verwenden Sie die Option -t.

readarray -t myArray < "$1" 
2

One way:

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

oder einfach:

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

Arbeiten mit * wird durch das erste Zeichen „$ IFS“ betroffen, die standardmäßig es passiert, ein Raum zu sein. Die Verwendung von 'printf '% s'" $ {myArray [@]} "' ist robuster. – sorontar

0

Falls Sie die Array-Elemente vom Eingang kommt, ist dies, wie Sie

  • erstellen ein Array
  • dann das Array in einer einzigen Zeile

Das Skript drucken, um es Elemente hinzufügen:

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

Ich kann den Code-Teil nicht als Code formatieren. Jemand hilft. –

1

Mein Lieblingstrick ist

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

8

einfache Art und Weise zu drucken, eine Linie

echo "${myArray[*]}" 

Beispiel:

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

echo "${myArray[*]}" 

#Result 
one two three four five 
+0

Was wäre, wenn ich formatierte Ausgabe wollte (zB durch Komma getrennte Liste von Strings in Anführungszeichen) – Prachi

+1

@Prachi Verwenden Sie dieses 'echo $ (IFS =', '; echo "$ {myArray [*] ///|}"; IFS = $ '') ', Link https://Stackoverflow.com/a/13471141/5287072 – DarckBlezzer

Verwandte Themen