【发布时间】:2011-05-13 10:34:09
【问题描述】:
我有一个这样的文件:
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 重现了这个问题。
【问题讨论】:
标签: linux bash scripting curl sed