我有一個這樣的文件:如何正確地將文件的一行讀入數組?
1234 1234 "First Name" "Last Name"
而且我有一個bash函數是這樣的:
function somePeoples()
{
body='"id":"'$1'","num":"'$2'","name":"'$3'","lname":"'$4'"'
echo $body
}
這是包含在bash腳本,我會在命令行採購。在這之後,我做了以下測試功能:
$ arr=(1234 1234 "First Name" "Last Name")
$ somePeoples "{arr[@]}"
$ "id":"1234","num":"1234","name":"First Name","lname":"Last Name"
$ somePeoples "${arr[0]}" "${arr[1]}" "${arr[2]}" "${arr[3]}"
$ "id":"1234","num":"1234","name":"First Name","lname":"Last Name"
現在,讓我們回到包含這樣行的文件:
input.txt:
1234 1234 "First Name" "Last Name"
2234 2234 "Some other name" "Some other last name"
我嘗試通過讀取文件中的每一行for循環與有限的計數,因爲我知道文件中有多少行。訣竅是讀取每一行,並將每行放入一個數組中傳遞給somePeoples函數。所以我編寫了一個腳本,用這個函數來獲取另一個腳本。就讓我們把它叫做客戶端腳本,讓我們假裝它實際上循環:
the client script:
arr=(`sed -n "1p" input.txt`)
somePeoples "${arr[@]}"
但我的恐懼輸出:
$ "id":"1234","num":"1234","name":""First,"lname":"Name""
此外,試圖做這些收益率相同的結果
somePeoples "${arr[0]}" "${arr[1]}" "${arr[2]}" "${arr[3]}"
somePeoples `sed -n "1p" input.txt`
有什麼區別?當我使用相同的引用模式在命令行輸入它時,它工作正常,但是當我從文件讀取輸入並將其傳遞給某個數組或直接傳遞給該函數時,無法正常工作。爲什麼即使引用了參數,它也會在空格上打破?而且,呃,我如何防止這種情況發生?
我實際上正在嘗試準備一個以jSON格式傳遞給cURL的請求體,並且輸入參數包含在長達數百行的文件中。但我認爲cURL的東西與這個問題無關,因爲我僅通過bash來重現問題。
非常感謝。 IFS做了訣竅:) – avendael 2010-11-21 17:15:03