shell - Shell 脚本中的循环变量和 `unset`

标签 shell loops unset

我只是想在这里确认一下,因为我只在 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/

相关文章:

string - 如何减去从字符串派生的两个 float

bash - 如何在进程替换中使用case/esac?

linux - 删除某些列并在 AW 中水平添加。太多的列,我无法输入每一列

PHP - 如果设置了变量值,是否有办法获取它?

PHP:如何销毁/取消设置应用程序中的所有类

带有 shell 命令和变量的 c makefile

regex - AS3 : RegExp exec method in loop problem

java - 非常简单的素数测试——我想我不理解 for 循环

PHP:使用if语句从数组中取消设置

macos - 在 Mac 上,在 shell 中,我如何知道我有一个 GUI?