【问题标题】:Pass variable to embeded "For Loop" in SH script将变量传递给 SH 脚本中嵌入的“For Loop”
【发布时间】:2014-07-10 16:05:05
【问题描述】:

我在 FreeBSD 中有一个 SH 脚本,但在将变量“count”传递给“For Loop”时遇到问题。

如果我添加

count=1

行后

for d in $list; do

然后它可以工作,但我需要在这个“for循环”之前设置变量。 “count=2”可防止“IF 语句”在完成“for d in $list”时再次运行。

我认为这与局部/全局变量设置有关。但是我尝试了几种组合都没有成功。

function(){

for i in $data; do
    check=0
    count=1

    [ script lines removed (N/A) ]

    if [ "$check" == "0" ]; then

            [ script lines removed (N/A) ]

            for d in $list; do

                    if  [ "$VAR" == "ABC" ]; then
                            :
                    else

                            if [ "$count" == "1" ]; then

                                   [ script lines removed (N/A) ]
                                   [ THIS "IF" SECTION NEEDS TO RUN ONCE ONLY ! ]

                                    count=2
                            else
                                    :
                            fi
                    fi
            done
    else
            :
    fi
done

}

【问题讨论】:

  • 我一直使用制表符来缩进?这不是正确的方法吗?另外,我尝试了您的脚本,但添加了另一个 for 循环并且它有效。但它在我的脚本中仍然不起作用。我也试过“-eq 1”
  • 使用[ comment ] 使得无法剪切并粘贴示例并运行它。试试# lines removed (N/A)
  • 那么您希望if 部分在for 循环的每次迭代中最多运行一次,还是总共只运行一次?
  • @William,是的,“If 部分”需要在“for d in $list”的每次迭代中运行一次。请参阅下面的我的答案。我使用了 count 变量两次,当我使用“pcount”而不是“count”时,脚本工作了。那么“count = 1”由于某种原因没有成立?很抱歉出现“#”问题。

标签: bash for-loop sh


【解决方案1】:
#!/bin/bash

list="foo bar baz"
count=1

for d in $list; do
  if [ $count -eq 1 ]; then
    echo "Tada"
    count=2
  fi
  echo $d
done 

那么现在问题出在哪里?我没有 FreeBSD 在那里检查它,所以告诉我它是否适合你。

【讨论】:

    【解决方案2】:

    解决方案 - 我的问题是我在此脚本的顶部使用了相同的变量名。

    count=$(cat $data | wc -l)
    echo "Found count [ $count ]"
    count=1
    

    所以,我的解决方案是更改“IF语句”使用的变量名

    “计数”到“pcount”


    count=$(cat $data | wc -l)
    echo "Found count [ $count ]"
    pcount=1
    

    我不明白为什么重新设置第二个 count=1 不起作用?

    【讨论】:

    • 因为第一个循环在每次下一次迭代时将其设置回 1 ?
    • @pawel7318,“If 部分”只需要在“for d in $list”的每次迭代中运行一次。所以第一个循环将其重置,因此下一次迭代也将运行一次。但是利用“count”变量,“If Section”永远不会运行。因此,将其设置为唯一的 var 名称“pcount”解决了这个问题。为什么,我不知道?
    猜你喜欢
    • 2019-06-10
    • 2013-02-14
    • 1970-01-01
    • 2021-04-09
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2019-07-16
    相关资源
    最近更新 更多