Bash Script |如何通过数组中的stdin读取输入



这就是脚本在终端上启动的方式:

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的示例脚本调用所示(。

最新更新