window bat批处理文件中常常有setlocal和endlocal,那它们的作用是什么呢?

microsoft官方文档解释是

Setlocal creates a local scope and endlocal terminates the local scope. Any changes made within the setlocal and endlocal scope are discarded, thereby leaving the original environment unchanged. You can nest these two commands to a maximum of 32 levels. For more information about the setlocal and endlocal commands, see Setlocal and Endlocal

也就是用来定义一个局部区域,这个区域中的任何变化不会改变原先的环境。而且setlocal和endlocal这一对可以嵌套最多32层。

它最大的好处就是不会影响原先的环境。比如原因环境中有一个变量叫variableA,它的值为"hello global".而在setlocal和endlocal中如果也定义了相同的变量名为variableA,并且对其更改值为"hello local"。这个"hello local"只会在setlocal和endlocal块中有效。出了局部区块后的值就又是"hello global"了。

那linux中对应的功能是怎么实现的?

很简单:() 来设置局部区域。

$ cat a.sh
A=OUTER
echo $A
(
A=INNER
echo $A
)
echo $A
$ ksh a.sh
OUTER
INNER
OUTER

 

发表评论