Bash Shell脚本数组未打印正确的值

Bash Shell脚本数组未打印正确的值,bash,Bash,我有一个简单的Shell脚本,其中我从文件中搜索ID和端口号,并将其保存在数组中。然而,当我试图打印它们时,我并没有得到预期的结果。我循环数组以打印第1和第2个元素,然后增加2以打印第3和第4个元素。我还希望将它们像每个ID端口一样打印在单独的行中,如下所示: ID Port ID Port 我的代码是: myarr=($(less radius-req | grep C4-3A-BE-18-C1-2D -B75 | grep '2018-11\|Port' | grep -v User |

我有一个简单的Shell脚本,其中我从文件中搜索ID和端口号,并将其保存在数组中。然而,当我试图打印它们时,我并没有得到预期的结果。我循环数组以打印第1和第2个元素,然后增加2以打印第3和第4个元素。我还希望将它们像每个ID端口一样打印在单独的行中,如下所示:

ID Port
ID Port
我的代码是:

myarr=($(less radius-req | grep C4-3A-BE-18-C1-2D -B75 | grep '2018-11\|Port' | grep -v User | grep Source -B1 | awk -F "Port:|id=" '{print $2}' )); for ((i=0;i<"${#myarr[@]}";i+=2)) ; do echo $i; printf "%s\n"  "${myarr[$i]}"  "${myarr[$i+1]}"  ; done;

从您给出的输出来看,我怀疑问题是由于radius req文件中的回车字符造成的。我猜该文件来自Windows(或者可能是web下载),它使用回车+换行符作为行终止符。Unix仅使用换行符(也称为换行符)作为终止符,Unix程序将把回车符视为行内容的一部分。最终的结果是:您得到像“
19
”和“
45210
”这样的数组值,当您打印它们时,它会将它们打印到彼此的顶部


如果我对这个问题的看法是正确的,那么很容易解决。只要用
tr-d'\r'替换
less radius req
(您无论如何都不应该使用它,请参阅William Pursell的评论),在不知道输入数据的情况下很难给出建议。您可以编辑问题以包含输入文件的一部分吗?
less
是一种交互式查看数据的工具,不应用于将数据写入管道。为此,请使用
cat
。(例如,
cat文件|……
)。但也不要这样做。相反,使用重定向。查找搜索“UUOC”返回的大约77800个结果中的一个。更不用说,以调用
awk
结尾的整个管道串可能都可以在
awk
中完成,而不会产生多个子shell。感谢您使用tr-d'\r'删除了回车符
$ myarr=($(less radius-req | grep C4-3A-BE-18-C1-2D -B75 | grep '2018-11\|Port' | grep -v User | grep Source -B1 | awk -F "Port:|id=" '{print $2}' )); echo ${myarr[@]}
 45210


$ myarr=($(less radius-req | grep C4-3A-BE-18-C1-2D -B75 | grep '2018-11\|Port' | grep -v User | grep Source -B1 | awk -F "Port:|id=" '{print $2}' )); echo ${myarr[0]}
19


$ myarr=($(less radius-req | grep C4-3A-BE-18-C1-2D -B75 | grep '2018-11\|Port' | grep -v User | grep Source -B1 | awk -F "Port:|id=" '{print $2}' )); echo ${myarr[1]}
45210


$ myarr=($(less radius-req | grep C4-3A-BE-18-C1-2D -B75 | grep '2018-11\|Port' | grep -v User | grep Source -B1 | awk -F "Port:|id=" '{print $2}' )); echo ${myarr[2]}
20


$ myarr=($(less radius-req | grep C4-3A-BE-18-C1-2D -B75 | grep '2018-11\|Port' | grep -v User | grep Source -B1 | awk -F "Port:|id=" '{print $2}' )); echo ${myarr[3]}
45210