首页 > 解决方案 > 将元素存储在数组中时出现意外结果

问题描述

我编写了一个 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) 为什么不是这样?

标签: bashshellsh

解决方案


推荐阅读