这就是脚本在终端上启动的方式:
echo 'username1 username2 username3' | ./security_check.sh
这是程序中应该读取stdin并将其放入数组的部分:
while read -r line_input
do
i_users[i]=$line_input
i+=1
done
IFS
在此脚本中没有设置为不同的内容。
输入保存在数组中后,应该可以像这样打印:
for i in ${i_users[@]}
do
echo "$i"
done
这个脚本通过stdin获取整个输入,并将其放在i_users[0]
中。我该怎么解决这个问题?数组i_users
在脚本的开头用declare -a i_users
声明
考虑:
while read -r line_input
将一次读取一行数据- 脚本有一行输入(
username1 username2 username3
( - 因此数组最终只有一个条目(索引=0/值=
username1 username2 username3
(
要将单行输入拆分为单独的数组条目,您有几个选项,其中一个是@choroba:建议的read -a
$ cat security_check.sh
#!/bin/bash
read -ra i_users
typeset -p i_users
运行OP的示例脚本调用:
$ echo 'username1 username2 username3' | ./security_check.sh
declare -a i_users=([0]="username1" [1]="username2" [2]="username3")
注意:这适用于单行输入(如OP的示例脚本调用所示(。