我的临时文件。
{"label": "Allowed","value": "20863962"} ,
{"label": "Denied","value": "5"} ,
读入数组。
#Read into array
IFS=$'\r\n' items=($(cat < ./tmp))
# print all items
echo "${items[@]}"
输出显示:
{"label": "Allowed","value": "20863962"} , {"label": "Denied","value": "5"} ,
我最后的卷曲命令失败了。
当我使用-x运行脚本时,它会在输出中显示额外的字符,我怀疑这可能导致我的最终curl命令失败。
+ echo '{"label": "Allowed","value": "20863962"} ,' '{"label": "Denied","value": "5"} ,'
注意echo输出中的额外''。
我的最终curl命令应该是这样的:
curl -d '{ "auth_token":"pass", "items": [{"label": "Allowed","value": "20863962"} , {"label": "Denied","value": "5"}] }' http://lab:3030/widgets/test
答案 0 :(得分:1)
要剥去额外的“,”你可以做类似的事情:
JSON='{"label": "Allowed","value": "20863962"} , {"label": "Denied","value": "5"} ,'
echo ${JSON%?}
# {"label": "Allowed","value": "20863962"} , {"label": "Denied","value": "5"}
答案 1 :(得分:1)
IFS=$'\r\n' items=($(cat < ./tmp))
当使用格式var =($ var2)或var =($(command))时,如果其上的字符串包含模式,则它将受到路径名扩展的影响,这可能导致代表现有的文件名,因此有时使用阅读是可取的。无论如何,这是我可能用bash做的。您可能会发现它也很有用。
#!/bin/bash
shopt -s extglob ## enable extended patterns
IFS=$'\n' read -rd ''-a items < file ## read input to array
items=("${items[@]##+([^\{])}") ## removing extra leading characters
items=("${items[@]%%+([^\}])?($'\r')}") ## removing extra trailing characters
IFS=, ## set IFS to , to separate values by commas in "${var[*]}"
echo curl -d "{ \"auth_token\":\"pass\", \"items\": [${items[*]}] }" "http://lab:3030/widgets/test"
您也可以使用noglob完全禁用路径名扩展。这也只对运行脚本的shell有效。
shopt -u -o noglob ## or set +o noglob, or set +f
IFS=$'\r\n' items=($(cat < ./tmp)) ## simply the same as IFS=$'\r\n' items=($(<./tmp))