取消设置脚本中定义的全局变量是一种好的做法吗?

2024-07-03

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

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

. myscript

执行脚本后,shell 会被脚本中定义的变量污染。这看起来真的很糟糕(特别是如果被其他人使用的话)。

如果可以的话,我会完全摆脱 sh (或 bash)中的全局变量,但更多时候它们并不是最糟糕的解决方案:-)。


这并不是真正执行脚本。它正在获取它,这使得 shell 执行脚本内的每个命令。如果你想执行该脚本,你可以这样做:

./myscript

在这种情况下,脚本内设置的任何环境变量都不会影响您的 shell。

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

(
  a=7
  echo $a
)
# The change in a doesn't get to here

如果您要取消设置所使用的变量,则会遇到相反的问题。如果用户设置了同名的变量,那么您最终会破坏它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

取消设置脚本中定义的全局变量是一种好的做法吗? 的相关文章

  • 使用sed插入文件内容

    我试图在给定模式之前插入文件内容 这是我的代码 sed i pattern i r scriptPath adapters default permissions xml manifestFile 它添加路径而不是文件的内容 有任何想法吗
  • 为什么 sed 将替换文本放在行首?

    在 Mac OS X bash 上 我在命令行中使用以下 sed sed s S 1 file1 txt gt file2 txt file1 txt有这样的行 some path to somewhere some stuff here
  • 无法在 Jenkins 管道作业中通过 DSL (groovy) 存储 sh 命令输出

    我想获得管道 Jenkins 作业中的最后构建输出并附加在电子邮件中 使用 emailext 插件 Curl 工作正常并提供正确的构建输出 但我无法存储在变量中以附加在电子邮件中 我正在使用最新的詹金斯版本 我可以看到有几个关于简单 sh
  • 在 BASH 中按字节读取文件

    我需要读取指定文件的第一个字节 然后读取第二个字节 第三个字节 依此类推 我怎样才能在 BASH 上做到这一点 P S 我需要获取这个字节的十六进制 完全重写 2019 年 9 月 比以前的版本更短更简单 速度更快 但没那么快 Yes ba
  • 难以理解反引号内反斜杠的非明显使用

    我已经阅读了大量的页面 包括 bash 手册 但仍然发现反斜杠的 非明显 使用令人困惑 If I do echo 它打印一个星号 这是正常的 因为我转义了星号 使其成为字面意思 If I do echo 它打印 这看起来也很正常 第一个反斜
  • 抓取每 4 个文件

    我有来自 webcan screeb 抓取器的 16 000 张 jpg 文件 我让它运行了一年 指向过去的一年 我想找到一种方法来抓取每第四张图像 以便我可以将它们放入另一个目录中 以便以后可以将它们变成电影 Linux 下是否有一个简单
  • bash get 命令在管道符号之前使用

    对于已经使用程序输出的半成品脚本 我还需要用于通过管道传输到我的脚本的程序的名称和参数 所以我这样运行 yay something myscript现在我需要将 yay Something 存储到变量中 有一种方法可以获取以前运行的命令或当
  • 过滤给定范围内的坐标

    我有数百个带有地理位置的 out 文件 我将把它们批量导入到 SQLite 数据库中 但是 为了节省时间 我只会导入地理坐标在某些间隔内的线 文件是这样的 value value longitude latitude value value
  • zsh 像 bash 一样迭代

    我最近从 bash 切换到 zsh 但不知道如何实现这一点 bash list aaa gt bbb gt ccc gt ddd for i in list do echo i xxx done aaa xxx bbb xxx ccc xx
  • sed 用变量替换[重复]

    这个问题在这里已经有答案了 我想替换一行内容alpha pi 具有给定角度的正确计算值 以弧度为单位 即变量 n1 bin bash read p Angle in degrees n1 Convert angle to radians p
  • ImageMagick 从圆中裁剪出正方形?

    我有一个 424x318 的图像 我在其中 画 了一个圆圈 并将其余部分保持透明 然后我想把那个圆圈剪掉 我怎样才能做到这一点 我的函数 bash 变量只是普通的东西 SCALEFILE 是文件 NEWFILE 是它保存的内容 SIZE 只
  • OSX 将 shell 脚本与文件扩展名相关联?

    我想将 exe 文件扩展名与启动 wine 的 shell 脚本关联起来 做这个的最好方式是什么 根据我收集的信息 我需要创建一个调用 wine 的 AppleScript 但是如何获取 AppleScript 中输入文件的名称 如果有更好
  • OSX 将 shell 脚本与文件扩展名相关联?

    我想将 exe 文件扩展名与启动 wine 的 shell 脚本关联起来 做这个的最好方式是什么 根据我收集的信息 我需要创建一个调用 wine 的 AppleScript 但是如何获取 AppleScript 中输入文件的名称 如果有更好
  • 以与 Bash 相同的方式转义文件名

    当我使用 tab 键时bash 当您开始输入文件名并希望其完成时 bash正确转义文件名 如果我完全使用 转义 文件名 它就可以工作 例如 An Beat Mentally Insine Original Mix mp3 gt 之后bash
  • 取消设置脚本中定义的全局变量是一种好的做法吗?

    在编写 sh 脚本时 在脚本末尾取消设置所有先前定义的全局变量是否被认为是好的做法 例如 如果我执行我的脚本myscript使用 来源 内置 像这样 myscript 执行脚本后 shell 会被脚本中定义的变量污染 这看起来真的很糟糕 特
  • 取消设置脚本中定义的全局变量是一种好的做法吗?

    在编写 sh 脚本时 在脚本末尾取消设置所有先前定义的全局变量是否被认为是好的做法 例如 如果我执行我的脚本myscript使用 来源 内置 像这样 myscript 执行脚本后 shell 会被脚本中定义的变量污染 这看起来真的很糟糕 特
  • Base64编码换行

    我正在尝试在 shell 脚本中将一些十六进制值编码为 base64 nmurshed ugster05 echo n 1906 1d8b fb01 3e78 5c21 85db 58a7 0bf9 a6bf 1e42 cb59 95cd
  • 使用 gawk 解析 CSV 文件

    如何使用 gawk 解析 CSV 文件 简单设定FS 还不够 因为内部带有逗号的引用字段将被视为多个字段 使用示例FS 这不起作用 文件内容 one two three four five six seven eight nine 呆呆的脚
  • 更改 Linux 中的默认 shell [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何更改默认 shell 这env命令当前显示 SHELL bin tcsh 我想将其更改为 Bash 尝试linux命令chsh 详细命令是chsh
  • 在 Python 中运行 Bash 命令

    在我的本地计算机上 我运行一个包含此行的 python 脚本 bashCommand cwm rdf test rdf ntriples gt test nt os system bashCommand 这很好用 然后我在服务器上运行相同的

随机推荐

  • 以编程方式检索 minSdkVersion

    我已经在清单中设置了 minSdkVersion 现在我想在代码中检索它 这应该很容易 但我不明白 我怎样才能做到这一点 minSDKVersion 是 Android 清单中的设置之一 没有 API 可以读取其值 这并非不可能 你最终必须
  • 以编程方式检索 minSdkVersion

    我已经在清单中设置了 minSdkVersion 现在我想在代码中检索它 这应该很容易 但我不明白 我怎样才能做到这一点 minSDKVersion 是 Android 清单中的设置之一 没有 API 可以读取其值 这并非不可能 你最终必须
  • Python从父类继承变量

    抱歉 如果我解释得不太好 但我会尽力 所以我想从Parent类继承变量 但我不想在创建Child类的实例时再次传递它们 因为我认为这是多余的 例如 我只想使用父母的眼睛颜色 请参阅下面的示例代码以了解我的意思 这是有效的 class Par
  • Python从父类继承变量

    抱歉 如果我解释得不太好 但我会尽力 所以我想从Parent类继承变量 但我不想在创建Child类的实例时再次传递它们 因为我认为这是多余的 例如 我只想使用父母的眼睛颜色 请参阅下面的示例代码以了解我的意思 这是有效的 class Par
  • 将 numpy 数组值转换为整数

    我的价值观目前显示为1 00 e09在数组中 类型 float64 我希望他们展示1000000000反而 这可能吗 制作一个样本数组 In 206 x np array 1e9 2e10 1e6 In 207 x Out 207 arra
  • 将 numpy 数组值转换为整数

    我的价值观目前显示为1 00 e09在数组中 类型 float64 我希望他们展示1000000000反而 这可能吗 制作一个样本数组 In 206 x np array 1e9 2e10 1e6 In 207 x Out 207 arra
  • 执行 shell 脚本而不隐式调用 sh

    我想知道是否可以在 usr bin 即 中建立一个指向 shell 脚本的 链接 但我只想写 shellscript 代替 sh shellscript sh 有点像别名 这可能吗 编写脚本的第一行 bin sh 然后通过键入命令使其可执行
  • 执行 shell 脚本而不隐式调用 sh

    我想知道是否可以在 usr bin 即 中建立一个指向 shell 脚本的 链接 但我只想写 shellscript 代替 sh shellscript sh 有点像别名 这可能吗 编写脚本的第一行 bin sh 然后通过键入命令使其可执行
  • 如何允许特定IP通过防火墙? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个本地 Apache 服务器 我希望可以从其他计算机访问它 我发现关闭 外部的 基于 Windows 的 防火墙后这是可能的 我可以在不关闭防火
  • 如何允许特定IP通过防火墙? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个本地 Apache 服务器 我希望可以从其他计算机访问它 我发现关闭 外部的 基于 Windows 的 防火墙后这是可能的 我可以在不关闭防火
  • Nunit 测试执行顺序

    对于那些精通自动化的人来说 这似乎是一个愚蠢的问题 但我正在为很多事情而苦苦挣扎 这是一个 我发现我在 Visual Studio 2008 中使用 Selenium RC 创建的测试是按照名称的字母顺序从 NUnit 运行的 我缺少什么
  • Nunit 测试执行顺序

    对于那些精通自动化的人来说 这似乎是一个愚蠢的问题 但我正在为很多事情而苦苦挣扎 这是一个 我发现我在 Visual Studio 2008 中使用 Selenium RC 创建的测试是按照名称的字母顺序从 NUnit 运行的 我缺少什么
  • 如何让 JqueryUI Sortable 与缩放/缩放一起使用 - 鼠标移动

    我正在尝试让 Jquery UI Sortable 与缩放一起使用 问题是鼠标的移动速度与您拖动的元素的移动速度不同 有很多关于如何使用 Draggable 来实现这一点的示例 以下是可拖动项目的解决方法示例 http jsfiddle n
  • 如何让 JqueryUI Sortable 与缩放/缩放一起使用 - 鼠标移动

    我正在尝试让 Jquery UI Sortable 与缩放一起使用 问题是鼠标的移动速度与您拖动的元素的移动速度不同 有很多关于如何使用 Draggable 来实现这一点的示例 以下是可拖动项目的解决方法示例 http jsfiddle n
  • 如何使用清晰的表单在一行上显示 Django SelectDateWidget

    我正在尝试在一行上显示使用 Django SelectDateWidget 呈现的 3 个选择字段 当我使用脆皮表格时 它们都位于不同的行上 有没有办法使用布局助手来实现这一点 谢谢你 class WineAddForm forms Mod
  • Xamarin Android 我需要在应用程序关闭时终止前台服务和通知

    让我解释一下这个场景 我需要每 10 分钟安排一项任务 即使应用程序处于后台并且省电模式已启动 此任务也需 要网络和磁盘资源 我尝试了 AlarmManager JobScheduler 和 ForegroundService 那么 当省电
  • 如何使用清晰的表单在一行上显示 Django SelectDateWidget

    我正在尝试在一行上显示使用 Django SelectDateWidget 呈现的 3 个选择字段 当我使用脆皮表格时 它们都位于不同的行上 有没有办法使用布局助手来实现这一点 谢谢你 class WineAddForm forms Mod
  • 从 VS Team Services 构建中运行的 Powershell 创建工作区

    我正在编写一个 Powershell 脚本作为 Visual Studio Team Services 构建的一部分 该构建使用托管构建控制器 该脚本旨在签出文件 进行更改 然后将其重新签入 在脚本中我试图调用tf命令创建新工作区 但我遇到
  • 从 VS Team Services 构建中运行的 Powershell 创建工作区

    我正在编写一个 Powershell 脚本作为 Visual Studio Team Services 构建的一部分 该构建使用托管构建控制器 该脚本旨在签出文件 进行更改 然后将其重新签入 在脚本中我试图调用tf命令创建新工作区 但我遇到
  • 取消设置脚本中定义的全局变量是一种好的做法吗?

    在编写 sh 脚本时 在脚本末尾取消设置所有先前定义的全局变量是否被认为是好的做法 例如 如果我执行我的脚本myscript使用 来源 内置 像这样 myscript 执行脚本后 shell 会被脚本中定义的变量污染 这看起来真的很糟糕 特