bash - 将元素存储在数组中时出现意外结果
问题描述
我编写了一个 shell 脚本,在其中我将interact_info中的数据解析为空格换行符分隔的参数并将其存储在$var 中。
现在我将它存储在一个数组中,以便我可以将它们发送到期望脚本(预期结果)
try.exp Directory '' 'User name' admin Password pass
这里的问题是我只得到 6 个参数而不是 7 个
喜欢
try.exp Directory 'User name' admin Password pass
但是,当我将 IFS 值更改为 '\r' 时,我得到了预期的结果。
这是什么原因?
interact_info='[{ "Directory": "" }, { "User name": "admin" }, { "Password": "pass" }, { "SMTP Server": "10.10.10.0" } ]'
old_IFS=$IFS
IFS=$'\n'
var=$(echo -e "$interact_info" | python -c 'import sys, json; \
stdin = sys.stdin.read()
exit(0) if stdin == "\n" else 0 ; \
interactions = json.loads(stdin); \
my_list = sum([(key, item[key]) for item in interactions for key in item],()); \
[sys.stdout.write(command+"\n") for command in my_list]' );
echo "${var}"
arr_params=($var)
IFS=$old_IFS
echo "${arr_params[@]}"
cli_raw_op=$(try.exp "${arr_params[@]}" 2>&1);
此外,如果 IFS=$'\n' 变量将具有值
+ var='Directory
User name
hcsadmin
Password
hcs@dmin
SMTP Server
10.10.10.0'
既然 '\n' 是分隔符,arr[1] 应该有 ""(empty string) 为什么不是这样?
解决方案
推荐阅读
- c# - 在 asp.net 中存储和检索会话是否正确
- mysql - 使用 MySQL 将记录从一张表插入到多个关系表中
- jquery - 如何映射对象的多个数据?
- python - 基于Python中的子字符串删除重复项
- javascript - 为什么输入标签中不需要我的 html 不起作用?
- c# - Azure AD 拒绝匹配回复 URL
- php - sh: gs: 使用 laravel 找不到命令
- python - 如何在 Python 中实现非阻塞无限循环
- sql - 查找磁盘上缺少文件的 PostgreSQL 记录,以及缺少 DB 记录的磁盘上的文件
- salesforce - 如何将 Microsoft 网络聊天机器人与 Salesforce Live Agent 连接起来?