是否在脚本中定义了未设置的全局变量的良好实践?

hel*_*hod 4 bash sh

在编写sh脚本时,在脚本末尾取消设置所有先前定义的全局变量是不是一种好的做法?

例如,我myscript使用.执行我的脚本.(来源)内置,就像这样

. myscript
Run Code Online (Sandbox Code Playgroud)

执行脚本后,shell会使用脚本中定义的变量进行操作.这似乎非常糟糕(特别是如果被其他人使用).

如果可以的话,我会完全摆脱sh(或bash)中的全局变量,但更常见的是它们不是最差的解决方案:-).

Vau*_*ato 10

这并不是真正执行脚本.它正在寻找它,这使得shell在脚本中执行每个命令.如果要执行脚本,可以执行以下操作:

./myscript
Run Code Online (Sandbox Code Playgroud)

在这种情况下,脚本中设置的环境变量都不会对shell产生影响.

如果您确实需要获取脚本,以便它可以执行诸如设置环境变量或更改当前目录之类的操作,那么您可以使用括号隔离子shell中的变量:

(
  a=7
  echo $a
)
# The change in a doesn't get to here
Run Code Online (Sandbox Code Playgroud)

如果你要取消设置你使用的变量,你会遇到相反的问题.如果用户设置了具有相同名称的变量,那么最终会将其销毁.