Как напечатать массив bash в одной строке
Я читаю данные типа файла в массив bash и должен распечатать его содержимое на той же строке с пробелами.
#!/bin/bash
filename=
declare -a myArray
readarray myArray <
echo "${myArray[@]}"
Я пробую это и даже с флагом echo-n он все еще печатает на новых линиях, что мне не хватает, будет ли printf работать лучше?
6 ответов
readarray
сохраняет конечную новую строку в каждом элементе массива. Чтобы раздеть их, используйте .
readarray -t myArray < ""
простой способ печати в одну строку
echo "${myArray[*]}"
пример:
myArray=(
one
two
three
four
[5]=five
)
echo "${myArray[*]}"
#Result
one two three four five
одним из способов :
printf '%s\n' "${myArray[@]}" | paste -sd ' '
или просто :
printf '%s ' "${myArray[*]}"
если у вас есть элементы массива, поступающие из входных данных, вот как вы можете
- создать массив
- добавить элементы к нему
- затем распечатайте массив в одной строке
сценарий:
#!/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[@]}
решение@sorontar, опубликованное в комментарии, было удобно:
printf '%s ' "${myArray[@]}"
но в некоторых местах ведущее пространство было неприемлемым, поэтому я реализовал это
local str
printf -v str ' %s' "${myArray[@]}" # save to variable str without printing
printf '%s' "${str:1}" # to remove the leading space