为给定的嵌套循环建议优化代码

时间:2011-06-15 10:45:37

标签: shell unix gnu gnu-make

请帮助我使下面的代码更具可读性(或建议任何优化)

    @for i in $(LIST_A); do \
            for j in  $(LIST_B); do\
            if [ "$$i" = "$$j" ] ;then\
             echo " A match found ";\                
            else\
            echo "Not found any corresponding String in LIST_B ";\
                     fi; \
            done\
    done;

1 个答案:

答案 0 :(得分:0)

不确定您的问题中有哪种shell语言,但这是一个Korn版本,您可能可以使用...

#!/bin/ksh

LIST_A="a b c d e"
LIST_B="d f g"

got_match="0"

for item_A in $LIST_A
do
    #echo $item_A
    for item_B in $LIST_B
    do
        #echo $item_A "  " $item_B
        if [ "$item_A" == "$item_B" ]
        then
            echo "matched " $item_A
            got_match="1"
            break 2;
        fi
    done
done

if [ "$got_match" == "0" ]
then
    echo "no match"
fi

“休息2”从两个循环中消失(假设这是你想要的)

“......使其更具可读性......”,也许是一种风格的东西,但我的建议是:

  1. 使用有意义的名称而不是i和j
  2. 避免在一行上多个语句(避免使用;)
  3. 正确缩进
  4. 如果不明显则表明意图的评论
  5. 另一个建议:在将来的问题中提供一个工作版本/代码片段,以便其他人可以运行测试,并指出它是什么语言。