如何在同一行打印 bash 数组

问题描述 投票:0回答:6

我正在将文件类型数据读入 bash 数组,并且需要在同一行上用空格打印其内容。

#!/bin/bash

filename=$1
declare -a myArray

readarray myArray < $1

echo "${myArray[@]}" 

我尝试了这个,即使使用 echo -n 标志,它仍然在换行符上打印,我错过了什么, printf 会更好吗?

arrays bash printf echo
6个回答
41
投票

一行打印的简单方法

echo "${myArray[*]}"

示例:

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

echo "${myArray[*]}"

#Result
one two three four five

7
投票

readarray
保留每个数组元素中的尾随换行符。要剥离它们,请使用
-t
选项。

readarray -t myArray < "$1"

7
投票

一种方法:

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

-
在 Linux 上不是强制性的,但在某些 Unices 上可能是必需的*

或者简单地:

printf '%s ' "${myArray[@]}"

3
投票

我最喜欢的技巧是

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


2
投票

@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 

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[@]}
© www.soinside.com 2019 - 2024. All rights reserved.