从子壳内部进行循环控制



我想使用子壳来确保环境更改不会影响循环中的不同迭代,但是我不确定我可以在子壳中使用循环控制语句(breakcontinue):

#!/bin/sh
export A=0
for i in 1 2 3; do
  (
  export A=$i
  if [ $i -eq 2 ]; then continue ; fi
  echo $i
  )
done
echo $A

循环外的A的值不受内部发生的任何事情的影响,没关系。但是,它是否允许在子壳中使用continue,还是应该将其移到外面?对于记录,它可以按书面形式工作,但这也许是不可靠的副作用。

只需添加

echo "out $i"

结束括号后看到它不起作用 - 它退出了子壳,但继续循环。

以下作品:

#! /bin/bash
export A=0
for i in 1 2 3; do
    (
        export A=$i
        if [ $i -eq 2 ]; then exit 1 ; fi
        echo $i
    ) && echo $i out      # Only if the condition was not true.
done
echo $A

您可以简单地将整个环包装在子壳中吗?

#!/bin/sh
export A;
A=0
(
    for i in 1 2 3; do
        A=$i
        if [ $i -eq 2 ]; then continue ; fi
        echo $i
    done
)
echo $A

还要注意,您无需每次分配到变量时都使用exportexport不导出值;它标志着要导出的变量,以便每当创建新过程时,该变量的当前值将添加到新过程的环境中。

相关内容

  • 没有找到相关文章

最新更新