文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Linux 中的 subshell 是什么?

2024-11-30 17:48

关注

除了 shell 之外,还有一个 subshell 的概念。

什么是 subshell

subshell 基本上就是一个新的 shell,只用于运行所需的程序。subshell 可以访问 “父 shell” 设置的全局变量,但是不能访问局部变量;subshell 对全局变量所作的任何更改都只限于当前 subshell 会话内,不会传递到 “父 shell”中。

接下来我们根据几个实际例子来详细介绍一下。首先看下面脚本,一个显示变量 var 的单行代码:

echo $var

我将这个变量的值设置为 字符串"LHB",那么大家猜一下,运行结果会怎样?

奇怪吧,脚本并没有打印我设置的变量值。

Shell 脚本在子Shell中运行(默认情况下)

为什么会出现上面的情况呢?因为当你在运行 shell 脚本时,它会在自己的 shell 中运行。由于此 shell 源自于另一个 shell(设置变量和运行脚本的地方),因此称为子 shell(即 subshell)

shell 脚本无法读取变量的值,因为它是一个局部变量,并且新创建的 shell 不知道这个值。如果你希望 subshell 可以访问这个变量,那么需要使用 export 命令将其转为全局变量。

你可以在当前 shell 中新启动一个 shell 来创建 subshell,只需运行 bash,即可进入一个 subshell。在 subshell 中运行 exit 命令即可退出 subshell 并回到原 shell 中。

但是新创建的 subshell 并不会打开一个新的窗口,它还是在当前窗口中,不过已经是一个新的 shell 了。

上面例子中我使用了一个变量来展示两个 shell(父 shell 和子 shell)的区别。当变量 var 没有导出时(使用 export),子 shell 是不能读取到的。

嵌套 subshell

你可以以相同的方式创建嵌套 subshell。变量导出后(export),它在随后创建的所有 subshell 中都可用。

你可以在 subshell 中修改导出后的变量的值,更改后的值也会传递给后续 subshell 中(因为变量本身是全局变量),但是当你退出 subshell 而回到原先的 shell 后,变量还是最初的原始值。

为什么呢?因为到处变量的值被复制到 subshell,它是一个副本(从 LHB 变为 HOC),在父 shell 中还是保留着原始值。

所以,需要记住的是:无法在 subshell 中更改父 shell 中的变量。无论该变量是否导出,在 subshell 中对变量做的修改不会影响到父 shell。

在当前 shell 中执行 shell 脚本

默认情况下,一个 shell 脚本是在自己的 shell(即 subshell)中执行的。但是你可以修改这个默认情况,即将 shell 脚本在当前 shell 中执行,通过 shell 内置命令 . 来实现。

具体怎样实现呢?不是这样 ./script,而是如下这种方式:

. script

这样,脚本中的命令就会在当前 shell 中执行,就像这些命令被直接键入终端中一样,而不是在 subshell 中运行。脚本可以通过这种方式来访问局部变量。


来源:TIAP内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯