子shell中的循环控制

Jel*_*lby 5 bash dash-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
Run Code Online (Sandbox Code Playgroud)

A循环外的值不受内部发生的任何影响,这没关系。但是允许使用continue子外壳内部还是应该将其移到外部?作为记录,它可以按原样工作,但也许这是一个不可靠的副作用。

cho*_*oba 3

只需添加

echo "out $i"
Run Code Online (Sandbox Code Playgroud)

在右括号之后查看它不起作用 - 它退出子 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
Run Code Online (Sandbox Code Playgroud)