web-dev-qa-db-fra.com

Comment imprimer un tableau bash sur la même ligne

Je lis des données de type de fichier dans un tableau bash et ai besoin d'imprimer son contenu sur la même ligne avec des espaces.

#!/bin/bash

filename=$1
declare -a myArray

readarray myArray < $1

echo "${myArray[@]}" 

J'essaie cela et même avec le drapeau echo -n, il imprime toujours sur les nouvelles lignes, que me manque-t-il, est-ce que printf fonctionnerait mieux?

7
Alec Beyer

readarray conserve la nouvelle ligne de fin dans chaque élément du tableau. Pour les supprimer, utilisez l'option -t.

readarray -t myArray < "$1"
6
chepner

Moyen simple d'imprimer sur une seule ligne

echo "${myArray[*]}"

exemple:

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

echo "${myArray[*]}"

#Result
one two three four five
15
DarckBlezzer

Une manière :

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

ou simplement :

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

Si vous avez les éléments de tableau provenant d’entrée, c’est comme ça 

  • créer un tableau
  • ajouter des éléments 
  • puis imprimez le tableau en une seule ligne

Le scénario:

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

La solution de @ sorontar publiée dans un commentaire était pratique:

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

mais à certains endroits l'espace de premier plan était inacceptable alors j'ai mis en œuvre cette 

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