web-dev-qa-db-ja.com

同じ行にbash配列を印刷する方法

私はファイルタイプのデータをbash配列に読み込んでおり、その内容を同じ行にスペースを入れて印刷する必要があります。

#!/bin/bash

filename=$1
declare -a myArray

readarray myArray < $1

echo "${myArray[@]}" 

私はこれを試してみますが、echo -nフラグを使用しても改行で印刷されますが、何が欠けていますか、printfはうまく機能しますか?

10
Alec Beyer

readarrayは、各配列要素の末尾の改行を保持します。それらを取り除くには、-tオプション。

readarray -t myArray < "$1"
6
chepner

1行で印刷する簡単な方法

echo "${myArray[*]}"

例:

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

echo "${myArray[*]}"

#Result
one two three four five
19
DarckBlezzer

一方通行 :

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

または単に:

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

私の好きなトリックは

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

1
user1699917

入力から配列要素を取得している場合、これができる方法です

  • 配列を作成する
  • 要素を追加します
  • 次に、配列を1行で出力します

スクリプト:

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