我想使用子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
的值不受内部发生的任何影响,这没关系。但是允许在子shell中使用continue
还是应该将其移到外面?为了记录,它的工作原理是写的,但也许这是一个不可靠的副作用。
答案 0 :(得分:2)
添加
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
答案 1 :(得分: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
不会导出值;它标记要导出的变量,因此无论何时创建新进程,该变量的当前值都将添加到新进程的环境中。