首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在linux中需要嵌套的while循环:-我有两个变量A=(a1; B2),B=(A1,B2)需要输出,比如this1=A1 & b2=B2

在linux中需要嵌套的while循环:-我有两个变量A=(a1; B2),B=(A1,B2)需要输出,比如this1=A1 & b2=B2
EN

Stack Overflow用户
提问于 2019-09-18 14:35:00
回答 1查看 63关注 0票数 0
代码语言:javascript
复制
while read line; do while read line1; do $line | grep $line1; done < <(echo "opt;Mem" ';' '\n');done < <(echo "df -k;free -b" | tr ';' '\n')

我用过这个,但它与发送所有第二个变量是一样的

我的需求是运行一些命令集(用;分隔),并用期望的输出(用;分隔)来grep它

我使用下面的命令:

代码语言:javascript
复制
while read line
    do while read line1
    do $line | grep $line1    
    break 
    done < <(echo "m;Mem" | tr ';' '\n')
done < <(echo "df -kh;free" | tr ';' '\n')

我正在寻找的输出:

代码语言:javascript
复制
df -kH | grep m
free | grep mem
EN

回答 1

Stack Overflow用户

发布于 2019-09-18 21:55:21

您不能使用嵌套循环来并行迭代两个集合,因为正如您已经注意到的那样,这会导致对一个集合的每一项迭代另一个集合的每一项(当您只需要n次迭代时,n*n次迭代)。

您需要使用单个循环,在此循环中,您将一次迭代两个集合。使用两个字符串创建数组将帮助您做到这一点:

代码语言:javascript
复制
commands="df -kh
free"
patterns="m
Mem"

readarray -t commands_array <<<"$commands"
readarray -t patterns_array <<<"$patterns"

for ((index=0; index<${#commands_array[@]}; index++)); do
    echo "${commands_array[index]} | grep ${patterns_array[index]}"
done

你可以使用try it here

如果需要处理;-separated命令和模式,可以使用以下命令:

代码语言:javascript
复制
commands="df -kh;free"
patterns="m;Mem"

readarray -d';' -t commands_array < <(echo -n "$commands")
readarray -d';' -t patterns_array < <(echo -n "$patterns")

#[...]

你可以使用try it here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57986449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档