2016-10-11 41 views
5

Tôi đang đọc dữ liệu filetype thành một mảng bash và cần in nội dung của nó ra trên cùng một dòng với dấu cách.Cách in một mảng bash trên cùng một dòng

#!/bin/bash 

filename=$1 
declare -a myArray 

readarray myArray < $1 

echo "${myArray[@]}" 

Tôi thử điều này và thậm chí với cờ echo -n nó vẫn in trên dòng mới, tôi thiếu gì, printf có hoạt động tốt hơn không?

Trả lời

4

readarray giữ lại dòng mới trong mỗi phần tử mảng. Để tách chúng, hãy sử dụng tùy chọn -t.

readarray -t myArray < "$1" 
2

Một cách:

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

hoặc đơn giản là:

printf '%s ' "${myArray[*]}" 
+0

Sử dụng * bị ảnh hưởng bởi các ký tự đầu tiên của "$ IFS", mà theo mặc định nó sẽ xảy ra là một không gian. Sử dụng 'printf '% s'" $ {myArray [@]} "' mạnh mẽ hơn. – sorontar

0

Trong trường hợp bạn có các phần tử mảng đến từ đầu vào, đây là cách bạn có thể

  • tạo một mảng
  • thêm yếu tố để nó
  • sau đó in mảng trong một dòng đơn

Kịch bản:

#!/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[@]} 
+0

Tôi không thể định dạng phần mã làm mã. Ai đó giúp đỡ. –

1

lừa ưa thích của tôi là

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

8

Cách đơn giản để in trong một dòng

echo "${myArray[*]}" 

dụ:

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

echo "${myArray[*]}" 

#Result 
one two three four five 
+0

Điều gì sẽ xảy ra nếu tôi muốn đầu ra được định dạng (ví dụ như danh sách các chuỗi được trích dẫn bằng dấu phẩy) – Prachi

+1

@Prachi Sử dụng 'echo $ (IFS =', '; echo' $ {myArray [*] ///|} "; IFS = $ '') ', liên kết https://stackoverflow.com/a/13471141/5287072 – DarckBlezzer

Các vấn đề liên quan