【发布时间】:2014-02-21 06:32:49
【问题描述】:
我想使用子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 还是应该将其移到外面?作为记录,它按其编写的方式工作,但也许这是一个不可靠的副作用。
【问题讨论】:
-
这很有趣。由于子shell 是独立的进程(有自己的
$BASHPID),因此您的代码会抛出通常的错误:continue: only meaningful in a 'for', 'while', or 'until' loop -
除非你真正的 subshell 在现实中做更多的事情,否则 subshell 中的
export完全没有意义。
标签: bash dash-shell