6

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

#!/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在子外壳内部使用,还是应该将其移到外部?作为记录,它按其编写的方式工作,但也许这是一个不可靠的副作用。

4

2 回答 2

3

只需添加

echo "out $i"

在右括号之后看到它不起作用 - 它退出子shell,但继续循环。

但是,以下工作:

#! /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
于 2014-01-29T12:54:43.193 回答
0

你能简单地将整个循环包装在一个子shell中吗?

#!/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

另请注意,您不需要export每次分配给变量时都使用。export不导出值;它标记要导出的变量,以便在创建新进程时,该变量的当前值将添加到新进程的环境中。

于 2014-01-29T14:30:32.907 回答