wake-up-neo.com

So drucken Sie ein Bash-Array in derselben Zeile

Ich lese Dateityp-Daten in ein Bash-Array ein und muss den Inhalt in derselben Zeile mit Leerzeichen ausdrucken.

#!/bin/bash

filename=$1
declare -a myArray

readarray myArray < $1

echo "${myArray[@]}" 

Ich versuche das und selbst mit dem Echo -n-Flag wird immer noch auf Zeilenumbrüchen gedruckt. Was fehlt mir, würde printf besser funktionieren?

7
Alec Beyer

readarray behält die nachgestellte Zeile in jedem Array-Element bei. Um sie zu entfernen, verwenden Sie die -t-Option.

readarray -t myArray < "$1"
6
chepner

Einfache Möglichkeit, in einer Zeile zu drucken

echo "${myArray[*]}"

beispiel:

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

echo "${myArray[*]}"

#Result
one two three four five
15
DarckBlezzer

Einweg :

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

oder einfach :

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

Mein Lieblingstrick ist

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

1
user1699917

Falls Sie die Array-Elemente von der Eingabe erhalten, können Sie dies folgendermaßen tun 

  • erstellen Sie ein Array
  • elemente hinzufügen 
  • drucken Sie dann das Array in einer einzigen Zeile

Das Skript:

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

@sorontars Lösung in einem Kommentar gepostet war praktisch:

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

an einigen Stellen war der führende Raum jedoch nicht akzeptabel, also habe ich dies umgesetzt 

local str
printf -v str ' %s' "${myArray[@]}"  # save to variable str without printing
printf '%s' "${str:1}"  # to remove the leading space 
0
Buoy