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?
readarray
conserve la nouvelle ligne de fin dans chaque élément du tableau. Pour les supprimer, utilisez l'option -t
.
readarray -t myArray < "$1"
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
Une manière :
printf '%s\n' "${myArray[@]}" | paste -sd ' '
ou simplement :
printf '%s ' "${myArray[*]}"
Si vous avez les éléments de tableau provenant d’entrée, c’est comme ça
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[@]}
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