2014-10-08 44 views
1

我試圖將多個單詞/參數放入一個變量中進行讀取。我試着將它分配給一個數組,並使用while循環將數組中的所有元素放入1個字符串中。Bash如何使用讀取命令將多個單詞分配給1個變量

read -a info 
    i=0 
    datastring="" 
    while [ $i -lt ${info[@]} ] 
    do 
     datastring=$datastring${info[i]} 
    done 
    echo "$dataString" 

當我運行程序它只是沒有做任何事情,坐在那裏,並不會打印出datastring和我有點失去了任何其他的方式來做到這一點。

+0

你想做什麼?假設'info'是5,然後是'0 <5',並且由於某種原因你無限次地將5連接到一個變量上? – BroSlow 2014-10-08 20:43:39

+2

你永遠不會更新循環中的'i',而是想將它與'$ {#info [@]}'進行比較。但是,如果你只是想將它壓縮到一個單一的字符串中,那麼爲什麼要將它首先讀入一個數組呢? – chepner 2014-10-08 20:47:46

+0

好吧,它應該是一個腳本創建一個文件應該是與其中的一些領域的單行文件。命令行給出了文件名和類型。這是測試代碼,看看這是否工作,但顯然它沒有。我也沒有想出如何在每個參數之間放置一個空間。這點很重要。至於我爲什麼這麼做了這樣一個新的bash,所以我試圖學習如何做不同的事情。 – Snipeshot 2014-10-08 20:50:45

回答

0
read datastring <<<"this sentence contains multiple words" 
echo "$datastring" 

如果你已經有一個數組

datastring=${info[*]} 

會連接這些陣列成一個字,使用$ IFS的第一個字符作爲分隔符。如果你希望所有沒有分隔符一起smushed的話,你可以這樣做:

datastring="" 
for word in "${info[@]}"; do datastring+=$word; done 

或本:

datastring=$(IFS=""; echo "${info[*]}") 

或本:

datastring=${info[*]} 
datastring=${datastring// /} 

注意,所有報價和陣列指數(* vs @)已仔細選擇:請參閱
http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion
http://www.gnu.org/software/bash/manual/bashref.html#Arrays

+0

謝謝,幫助很多。 – Snipeshot 2014-10-08 21:10:39

相關問題