2016-10-11 17 views
5

मैं फ़ाइल प्रकार डेटा में बैश सरणी में पढ़ रहा हूं और रिक्त स्थान के साथ उसी पंक्ति पर अपनी सामग्री को प्रिंट करने की आवश्यकता है।उसी पंक्ति पर एक बैश सरणी को मुद्रित करने के लिए कैसे करें

#!/bin/bash 

filename=$1 
declare -a myArray 

readarray myArray < $1 

echo "${myArray[@]}" 

मैं इस और भी गूंज -n झंडा यह अभी भी नई-पंक्तियों पर प्रिंट, मैं क्या याद आ रही है के साथ प्रयास करें, बेहतर काम printf हैं?

उत्तर

4

readarray प्रत्येक सरणी तत्व में पिछली नई रेखा को बरकरार रखता है। उन्हें पट्टी करने के लिए, -t विकल्प का उपयोग करें।

readarray -t myArray < "$1" 
2

एक ही रास्ता:

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

या बस:

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

का उपयोग कर * "$ आईएफएस", का पहला वर्ण जो डिफ़ॉल्ट रूप से यह एक अंतरिक्ष होने से प्रभावित है। 'Printf '% s'" $ {myArray [@]} "का उपयोग करना अधिक मजबूत है। – sorontar

0

मामले आप सरणी तत्वों इनपुट से आ रही है में, यह तुम कैसे

  • बना सकते हैं एक सरणी
  • इसे करने के लिए तत्वों को जोड़ने
  • तो एक पंक्ति में सरणी प्रिंट

स्क्रिप्ट:

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

मैं कोड भाग को कोड के रूप में स्वरूपित करने में सक्षम नहीं हूं। कोई मदद करता है। –

8

सरल में मुद्रित करने के लिए रास्ता है एक पंक्ति

echo "${myArray[*]}" 

उदाहरण:

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

echo "${myArray[*]}" 

#Result 
one two three four five 
+0

क्या होगा यदि मैं स्वरूपित आउटपुट चाहता था (उदाहरण के लिए एकल उद्धृत तारों की अल्पविराम से अलग सूची) – Prachi

+1

@Prachi इस 'echo $ (IFS =', 'echo "$ {myArray [*] ///|}" का उपयोग करें; IFS = $ '') ', लिंक https://stackoverflow.com/a/13471141/5287072 – DarckBlezzer

संबंधित मुद्दे