我只是想在这里确认一下,因为我只在 dash
shell 中进行了测试,但是循环变量通常会与 shell 脚本中外部作用域中的变量发生冲突吗?例如
#! /bin/sh
i='1 2 3'
a='a b c'
for i in $a; do
echo "$i"
done
echo "$i"
输出:
a
b
c
c
这对我来说很有意义。也就是说,这似乎表明我是对的,循环变量会发生冲突(它们与外部作用域共享相同的命名空间)。我想知道,因为如果我使用没有 local
命令的旧式 shell,我想确保unset
我在中使用的循环变量功能。我读过的文本涵盖了unset
,但似乎没有涵盖这种情况。
我说得对吗?
最佳答案
为了避免命名空间问题..您可以 fork 脚本并将循环放入该 fork 内..
#! /bin/sh
i='1 2 3'
a='a b c'
function_to_fork(){
for i in $a; do
echo "$i"
done
}
(function_to_fork)
echo "$i"
关于shell - Shell 脚本中的循环变量和 `unset`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67727878/