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

  • 本文关键字:打印 脚本 数组 Shell bash
  • 更新时间 :
  • 英文 :


我有一个简单的Shell脚本,我在其中从文件中搜索ID和端口号,并将其保存在Array中。然而,当我尝试打印它们时,我并没有得到预期的结果。我循环数组以打印第一个和第二个元素,然后增加两个以打印第三个和第四个元素。我还想把它们像每个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 "%sn"  "${myarr[$i]}"  "${myarr[$i+1]}"  ; done;

即使我试图回显整个数组,我也只能看到最后一个元素,而我可以毫无问题地打印每个单独的元素。

$ 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

从您给出的输出中,我怀疑问题是由于radius-req文件中的回车字符造成的。我猜这个文件来自Windows(或者可能是网络下载(,它使用回车+换行作为行终止符。Unix只使用换行符(又称换行符(作为终止符,Unix程序将回车视为换行内容的一部分。最终结果:您可以得到像"19<CR>"one_answers"45210<CR>"这样的数组值,当您打印它们时,它会将它们打印在一起。

如果我对这个问题的看法是正确的,那么很容易解决。只需将less radius-req(无论如何都不应该使用,请参阅William Pursell的评论(替换为tr -d 'r' <radius-reqtr命令执行字符替换,-d表示只是删除而不是替换,而r是其回车字符的表示法。结果:它会在回车有机会把事情搞砸之前删除回车。

相关内容

  • 没有找到相关文章

最新更新