[Linux/shell]求教如何将两个带有空格的字符串转换为数组

yeweiouyang
博客专家认证
2017-08-21 07:50:12
我通过公共函数求得两个字符串

param_values=$(parse_json_with_keys) # 运行后,param_values: "select * from t" "terry"

然后将变量转换为数组,取第一、二个元素,取出值与我期望相反

param_values=(${param_values})
echo ${param_values[0]} # 输出: "select
echo ${param_values[1]} # 输出: *

期望值是

echo ${param_values[0]} # 输出: select * from t
echo ${param_values[1]} # 输出: terry

很困惑,求教各位大神!
...全文
902 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码誊写工 2017-08-22
  • 打赏
  • 举报
回复
首先:
#正确的情况
$ param_values=("select * from t" "terry")

$ echo "${param_values[0]}" #必须加引号,或则set -f禁止*扩展为文件名
select * from t

$ echo "${param_values[1]}"
terry

$ param_values="select * from t" "terry" #错误

#以下就是问题产生的原因
$ param_values='"select * from t" "terry"'
$ echo "$param_values"
"select * from t" "terry"

$ param_values=("$param_values")
$ echo "${param_values[0]}"
"select * from t" "terry"

$ param_values=($param_values)
$ echo "${param_values[0]}"
"select

#暂时的解决办法就是
$ oldifs=$IFS; IFS=$'\n'; i=0; for param_tmp in $(echo "${param_values}" | sed -e "s/\" \+\"/\"\n\"/g" -e "s/\"//g");do param_values[i]="${param_tmp}";((i++)); done; IFS=$oldifs

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧