私はファイルタイプのデータをbash配列に読み込んでおり、その内容を同じ行にスペースを入れて印刷する必要があります。
#!/bin/bash
filename=$1
declare -a myArray
readarray myArray < $1
echo "${myArray[@]}"
私はこれを試してみますが、echo -nフラグを使用しても改行で印刷されますが、何が欠けていますか、printfはうまく機能しますか?
readarray
は、各配列要素の末尾の改行を保持します。それらを取り除くには、-t
オプション。
readarray -t myArray < "$1"
1行で印刷する簡単な方法
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[*]}"
私の好きなトリックは
echo $(echo "${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