我正在将文件类型数据读入 bash 数组,并且需要在同一行上用空格打印其内容。
#!/bin/bash
filename=$1
declare -a myArray
readarray myArray < $1
echo "${myArray[@]}"
我尝试了这个,即使使用 echo -n 标志,它仍然在换行符上打印,我错过了什么, printf 会更好吗?
一行打印的简单方法
echo "${myArray[*]}"
示例:
myArray=(
one
two
three
four
[5]=five
)
echo "${myArray[*]}"
#Result
one two three four five
readarray
保留每个数组元素中的尾随换行符。要剥离它们,请使用 -t
选项。
readarray -t myArray < "$1"
一种方法:
printf '%s\n' "${myArray[@]}" | paste -sd ' ' -
-
在 Linux 上不是强制性的,但在某些 Unices 上可能是必需的*
或者简单地:
printf '%s ' "${myArray[@]}"
我最喜欢的技巧是
echo $(echo "${myArray[@]}")
@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
如果您有来自输入的数组元素,则可以这样做
剧本:
#!/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[@]}