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

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(使用前将#替换为@)

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

  • 如何仅使用 grep/sed 提取子字符串和数字

    我有一个包含文本和数字的文本文件 我想使用 grep 只提取我需要的数字 例如 给定一个文件如下 miss rate 0 21 ipc 222 stalls n shdmem 112 所以说我只想提取数据miss rate这是0 21 如何
  • 从名称获取 AWS EMR 集群 ID

    AWS CLI 命令aws emr list clusters返回以下 json 有没有一种方法可以通过 bash 或 groovy 使用名称来获取 Id 我不能只使用 ID 因为我正在删除集群并仅使用相同的名称重建它们 所以我知道集群的名
  • 使用列命令时出现 Bash 错误:“列:行太长”

    当我使用输入文件键入此列命令时 出现以下错误 column t text txt gt output column line too long column line too long column line too long column
  • 从 Bash 中的字符串中删除固定前缀/后缀

    我想从字符串中删除前缀 后缀 例如 给定 string hello world prefix hell suffix ld 我如何得到以下结果 o wor prefix hell suffix ld string hello world f
  • 通过 ssh 运行具有嵌套引号的 shell 命令

    我有以下 shell 命令 ssh user host df grep dev awk BEGIN print DISK USAGE STATUS split 5 a var GREEN print 1 5 var column t 我需要
  • bash get 命令在管道符号之前使用

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

    假设我有一个要运行的命令 cmd 和一个包含我想要传递给函数的参数的变量 类似于 foo bar baz qux 就像这样 bin sh command cmd args foo bar baz qux 参数包含引号 如上所示 将包含空格的
  • 将带有任意特殊字符的多行字符串插入到 shell 脚本中的模板文件中

    就像是 cat template txt ruby e puts STDIN read sub placeholder IO read content txt gt output txt Or ed template txt lt
  • Bash:进程替换的范围是什么?

    据我所知 进程替换 创建 fd 并将括号中命令的输出存储到生成的 fd 中 因此 这两个命令是等价的 ls al cat lt ls al 在这里 我的问题是 生成的文件描述符保留多长时间 我读过这个 但似乎我的理解是错误的 如果进程替换被
  • 为什么 bash 无法识别套接字文件的存在

    在 Linux 机器上 我想检查特定的套接字文件是否存在 我知道套接字文件存在 但我在 bash 中的检查没有向我显示这一点 ls l var run supervisor sock srwxrw rw 1 root root 0 Jun
  • 使用 applescript 在空间中打开应用程序

    我正在尝试创建一个脚本 该脚本将在特定的 空间 中打开应用程序 假设我在空间 1 的终端中工作 然后我希望能够在空间 4 中打开 safari 有没有办法做到这一点 我做了一些搜索 只找到了设置系统配置文件选项的方法 也许我应该告诉你我的最
  • 如何显示带有完整路径或文件名的“grep”结果[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 使用时如何获取完整的文件路径grep 我使用类似的命令 cat log grep somethingtosearch 我需要显示结果以及从
  • find -regex 比 find | 慢grep

    我有一个使用正则表达式查找文件的脚本 代码如下 find dir grep regex 该脚本运行有点太慢 我想优化它 搜索需要一些时间来执行 我希望从中获得更好的性能 我尝试过这个尝试 find dir regex regex 我预计结果
  • Bash:如何打印并运行其中包含管道运算符 | 的 cmd 数组

    这是我的问题的后续 当命令的参数带有空格或要扩展的内容时 如何编写 bash 函数来打印和运行命令 https stackoverflow com q 71117953 4561887 假设我有这个函数来打印并运行存储在数组中的命令 Pri
  • 以与 Bash 相同的方式转义文件名

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

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

    我有文件 acl txt 192 168 0 1 192 168 4 5 start exceptions 192 168 3 34 192 168 6 78 end exceptions 192 168 5 55 和另一个文件 例外 19
  • Bash 脚本:Gzip 整个文件夹并保持文件扩展名相同[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想递归地对文件夹中的每个文件进行 gzip 压缩 并在压缩后保留原始名称和扩展名 我尝试过 sudogzip 9 r folder但是现在每个文件都
  • Shell 脚本在延迟后生成进程

    如何在 shell 脚本延迟后生成进程 我希望命令在脚本启动 60 秒后启动 但我想继续运行脚本的其余部分 而不先等待 60 秒 想法是这样的 bin sh Echo A 60 seconds later but without block
  • 如何将数组传递给 bash 函数

    如何将数组传递给函数 为什么这不起作用 其他问题的解决方案对我不起作用 根据记录 我不需要复制数组 所以我不介意传递引用 我想做的就是循环它 ar a b c function test echo 1 echo ar a b c test

随机推荐

  • 以编程方式检索 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 会被脚本中定义的变量污染 这看起来真的很糟糕 特
  • 取消设置脚本中定义的全局变量是一种好的做法吗?

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