linux – 如何在ksh中过滤字符串数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 如何在ksh中过滤字符串数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1871字,纯文字阅读大概需要3分钟。
内容图文
![linux – 如何在ksh中过滤字符串数组](/upload/InfoBanner/zyjiaocheng/956/d66279a1632f47a1b4923df2371efdb0.jpg)
我想从“aa”数组中删除“bb”数组中定义的IP,因此IP的255.0.0.0和255.255.255.0将从数组中的列表中删除.
当我运行我的ksh代码然后打印数组aa时,我看到IP-255.255.255.0没有被删除?
我的语法有什么问题?
echo ${aa[*]}
45.32.3.5 255.0.0.0 255.255.255.0 19.23.2.12
echo ${bb[*]}
255.0.0.0 255.255.255.0
ksh程序:
for run in ${bb[*]}
do
for ((i=0; i<${#aa[@]}; i++)); do
[[ ${aa[i]} == $run ]] && unset aa[i]
done
done
测试:
echo ${aa[*]}
45.32.3.5 255.255.255.0 19.23.2.12
注意:应从上面的列表中删除255.255.255.0.
解决方法:
我不知道为什么你的代码不适用于所提供的输入.它在我的系统下在ksh下运行.
但是你的原始代码有一个问题:条件部分i< ${#aa [@]}是脆弱的 - 因为${#aa [@]},即数组大小在每次取消设置后递减 - 但是以下数组元素是没有自动向左移动.以你为榜样
45.32.3.5 255.0.0.0 255.255.255.0 19.23.2.12
这没有什么区别 – 但它会产生影响 – 比如说:
45.32.3.5 255.0.0.0 19.23.2.12 255.255.255.0
我改进了与该问题相关的代码(注意循环条目之前的赋值).我还消除了一个内部循环(使用关联数组),它将运行时从二次变为线性:
$cat x.sh
输出它:
aa=(45.32.3.5 255.0.0.0 255.255.255.0 19.23.2.12)
bb=([255.0.0.0]=1 [255.255.255.0]=1)
print Size of input ${#aa[*]}
print Size of exclude list ${#bb[*]}
n=${#aa[*]}
for ((i=0; i<$n; ++i))
do
if [[ ${bb[${aa[i]}]} ]]
then
print Removing element with index $i: ${aa[i]}
unset aa[i];
fi
print New size of input ${#aa[*]}
done
print Resulting size of input ${#aa[*]}
print Resulting elements ${aa[*]}
for ((i=0; i<$n; ++i))
do
print Index $i, Value 'a['$i']'=${aa[$i]}
done
它在Fedora 17上产生以下输出:
$ksh x.sh
Size of input 4
Size of exclude list 2
New size of input 4
Removing element with index 1: 255.0.0.0
New size of input 3
Removing element with index 2: 255.255.255.0
New size of input 2
New size of input 2
Resulting size of input 2
Resulting elements 45.32.3.5 19.23.2.12
Index 0, Value a[0]=45.32.3.5
Index 1, Value a[1]=
Index 2, Value a[2]=
Index 3, Value a[3]=19.23.2.12
内容总结
以上是互联网集市为您收集整理的linux – 如何在ksh中过滤字符串数组全部内容,希望文章能够帮你解决linux – 如何在ksh中过滤字符串数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。