首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的变量不能在bash中保存它的值?

在Bash中,变量的作用范围是有限的,当变量在一个子shell中被赋值时,它的值不会传递到父shell或其他子shell中。这是因为每个子shell都有自己的环境和变量空间,它们是相互独立的。

当你在Bash中执行一个命令时,它会创建一个子shell来运行该命令。子shell继承了父shell的环境变量,但是它的变量空间是独立的。因此,当你在子shell中修改一个变量的值时,这个变量只在子shell中有效,对于父shell来说是不可见的。

如果你想在Bash中保存变量的值,可以使用以下方法:

  1. 使用export命令:通过export命令将变量导出到环境中,这样它就可以在子shell中访问到。例如:
  2. 使用export命令:通过export命令将变量导出到环境中,这样它就可以在子shell中访问到。例如:
  3. 使用source命令:通过source命令执行一个脚本文件,这样脚本中定义的变量就可以在当前shell中生效。例如:
  4. 使用source命令:通过source命令执行一个脚本文件,这样脚本中定义的变量就可以在当前shell中生效。例如:
  5. 使用命令替换:可以使用命令替换将命令的输出赋值给一个变量。例如:
  6. 使用命令替换:可以使用命令替换将命令的输出赋值给一个变量。例如:

需要注意的是,这些方法只能在当前shell中保存变量的值,当你关闭当前shell或重新启动系统时,这些变量的值将会丢失。如果你希望永久保存变量的值,可以将其添加到Bash配置文件(如~/.bashrc或~/.bash_profile)中。

总结起来,Bash中变量不能在不同的子shell之间共享是因为每个子shell都有自己的变量空间。要在Bash中保存变量的值,可以使用export命令、source命令或命令替换等方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

番外特别篇之 为什么建议你直接使用UIImage传?--从一个诡异相册九图连读崩溃bug谈起

关于"番外特别篇" 所谓"番外特别篇",就是系列文章更新期间内,随机插入一篇文章.目前正在更新系列文章是 实现iOS图片等资源文件热更新化.但是,这两天,被一个自己App诡异相册读取Bug...最后最后,说是会拿手机给我测试.不过,最后BOSS手机,还是没有拿到,只是拿到了开篇那张画风诡异图片.没错,就是,连续选取9张,就Crash了....不行,得去看看.一行一行,看代码,从天黑到天亮,从期待到绝望...其实,稍微有一些对比实验常识的人,都很容易猜到: 两种情况,唯一变量是 图片素材本身,那 最可能 原因肯定是 图片本身问题.一种高大上说法...3.确定是PHImageManager 问题requestImageForAsset:方法引起高内存占用 当你通过注释法,配合断点,很容易就可以引起内存高占用代码.此处,App,是读取相册原图...无法直接以UIImage格式,连续把九张图保存到缓存目录 图片选取后,并不是立即上传,为了能实现"重发"功能,需要在缓存目录保留副本.原来是将 UIImage 转换为 NSData写入.在此过程,又一次引起了巨额内存开销

1.6K70

【Linux】命令行参数和环境变量

上下文会存在进程PCB。 进程切换时: 保存上下文; 恢复上下文。...我们所运行进程,都是bash子进程,bash本身在启动时候,会从操作系统配置文件读取相关环境变量信息,子进程会继承父进程交给我环境变量。...HOME HOME : 指定用户主工作目录(即用户登陆到Linux系统时,默认目录) echo $HOME  SHELL SHELL : 当前Shell,通常是/bin/bash echo...执行命令时,bash要创建子进程,那么运行时候要创建子进程吗? 如果需要创建子进程,那么因为本地变量不会被继承,也就不会被打印出来,可事实并非如此。...其实命令分为两批: 常规命令:通过创建子进程完成; 内建命令:bash创建子进程,而是由自己亲自执行,类似于bash调用了自己写,或是系统提供函数。

9810

如何在 Linux 运行一个 Shell 脚本

不要担心,将使用示例来进行必要解释,以便你能理解为什么在运行一个 shell 脚本时要使用给定特定语法格式。...为什么当你在同一个目录下,却不能使用脚本名称?这是因为你 Linux 系统会在 PATH 环境变量中指定几个目录查找可执行文件来运行。...这里是系统 PATH 环境变量: abhishek@itsfoss:~$ echo $PATH/home/abhishek/.local/bin:/usr/local/sbin:/usr/local...当你使用脚本而不具体指定其绝对路径或相对路径时,系统将不能在 PATH 环境变量中找到提及脚本。 为什么大多数 shell 脚本在其头部包含 #! /bin/bash ?...记得提过 shell 只是一个程序,并且有 shell 程序不同实现。 当你使用 #! /bin/bash 时,你是具体指定 bash 作为解释器来运行脚本。如果你这样做,并且以 .

3.4K20

linux查看全部环境变量_linux刷新环境变量命令

大家好,又见面了,是你们朋友全栈君。...设置变量三种方法 1.在/etc/profile文件添加变量【对所有用户生效(永久)】 用VI在文件/etc/profile文件增加变量,该变量将会对Linux下所有用户有效,并且是“永久”...注:一般只有root用户才有编辑权限; 2.在用户目录下.bash_profile文件增加变量【对单一用户生效(永久)】 用VI在用户目录下.bash_profile文件增加变量,改变量仅会对当前用户有效...使用unset删除指定环境变量 set可以设置某个环境变量。清除环境变量用unset命令。如果未指定,则该变量值将被设为NULL。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

7.9K30

《前端运维》一、Linux基础–04Shell变量

,只不过可能在此基础上有些具体细节不同。...: 三、参数传递 是实话,这个东西不知道该不该放在这,到底属于什么,属于变量分类里面的那个shell变量类型么?...还是说它不是变量?但是它为什么又有变量特征,你说它是运算符呢?它又不参与运算。所以,看起来像是一个用符号表示变量。...declare [+/-][rxi][变量名称=设置] 常用选项有这些: +/-  ”-“可用来指定变量属性,”+”则是取消变量所设属性。 -a,将变量声明为数组类型。...,这种感觉并不像是javascript那样,类型是一个纯粹更像是一种属性: 上面的结果,在代码里加了两行: #!

43120

《前端运维》一、Linux基础--04Shell变量

,只不过可能在此基础上有些具体细节不同。...: 三、参数传递 是实话,这个东西不知道该不该放在这,到底属于什么,属于变量分类里面的那个shell变量类型么?...还是说它不是变量?但是它为什么又有变量特征,你说它是运算符呢?它又不参与运算。所以,看起来像是一个用符号表示变量。...declare [+/-][rxi][变量名称=设置] 常用选项有这些: +/-  "-"可用来指定变量属性,"+"则是取消变量所设属性。 -a,将变量声明为数组类型。...,这种感觉并不像是javascript那样,类型是一个纯粹更像是一种属性:  上面的结果,在代码里加了两行: #!

46820

是如何利用环境变量注入执行任意命令

shell中方可执行: 0x06 BASH_ENV导致命令注入 看了两晚上dash代码,几乎要给我看吐了,很难理解为什么代码里要用这么多goto。...最后还是很遗憾,虽然找到了两个可以进行命令注入环境变量,但它们都不能在sh -c时触发。 目标转向了Bash,如果目标系统是CentOS,那么系统上sh指向Bash,此时是否能有突破呢?...虽然这个发现没有解决最初提出问题,但仍然是往前垮了一步,即我们在控制bash参数情况下,可以通过环境变量注入任意命令。这可能在部分情况下会有一些作用。...所以,虽然这一节里找到了多个可以执行命令环境变量,但都不能在sh -c情况下直接利用,一度以为自己C语言阅读能力也就是没法解决这个问题了。...0x09 Bash版本导致不完美 为什么说是几乎?因为实际在CentOS 7下做测试时候,发现并不能复现这个trick。

61110

shell(一)

以后如果指定,默认shell为命令行式shell,在工作,最常用便是Linux系统下bash。.../bin/bash # 获取脚本名称 echo "脚本名称是:$0" echo "脚本执行进程号是:$$" # 获取当前脚本传入参数数量 echo "当前脚本传入参数数量是: $#" #...: 表示取反 命令 3.3.8全部信息符号 全部信息符号为 2>&1 1:标准输出信息,将执行正确信息保存到一个文件。 2:标准错误信息,将执行报错信息保存到一个文件。...$ cat error bash: ethan: 未找到命令 文件保存了出错信息。...为什么说它神奇呢?因为好似一个无敌洞,你可以向里面随意扔东西,而且填不满。如果你还是不知道干什么用,那我还是说一下吧。

3.4K50

Linux 查看环境变量_linux查看环境变量env

大家好,又见面了,是你们朋友全栈君。 Linux设置和查看环境变量 环境变量,简要说,就是指定一个目录,运行软件时候,相关程序将会按照该目录寻找相关文件。...在linux系统下,如果你下载并安装了应用程序,很有可能在键入名称时出现“command not found”提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。...2、在用户目录下.bash_profile文件增加变量【对单一用户生效(永久)】 用VI在用户目录下.bash_profile文件增加变量,改变量仅会对当前用户有效,并且是“永久...清除环境变量用unset命令。如果未指定,则该变量值将被设为NULL。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

35.8K30

为什么

Bash Shell是一种Unix/Linux操作系统命令行解释器,支持多种编程语言,包括C、C++、Java、Perl、Python等。.../filename 方式来运行脚本。 5. 介绍一下Shell脚本变量? Shell脚本变量可以存储任意类型数据,包括字符串、数字、数组等。..." "cherry") # 定义一个字符串数组变量array,为["apple","banana","cherry"] 在Shell脚本可以使用 符号来引用变量,例如 name 可以输出变量 name...为什么? Shell不支持直接定义多维数组,但可以使用一维数组元素作为另一个一维数组名字,从而实现多维数组效果。...从兼容性上考虑,因为Shell有很多种实现,例如Bash、Ksh、Zsh等,它们之间有一些共同标准,也有一些各自扩展,如果支持多维数组,可能会导致不同Shell之间差异和兼容。

1.3K30

Linux:进程概念(四.main函数参数、环境变量及其相关操作)

定义变量本质就是开辟空间,为了方便表述这篇空间,我们起个名字而已 我们程序在运行期间,也能开辟空间 操作系统与bash都是用c语言写,也能在运行时开辟空间。...只能在bash里使用 可以使用unset清楚环境变量和本地变量 2.5代码获取环境变量 通过main函数第三个参数(最多就三个啦,真的没有了) #include int main...原型定义在 头文件: char *getenv(const char *name); 参数 name 是要获取环境变量名称,函数返回该环境变量。...,用于声明一个变量或函数,表明该变量或函数是在其他文件定义,当前文件只是引用了。...2.6添加或者修改环境变量 putenv 是 C 语言中一个库函数,定义在 头文件。这个函数用于将字符串添加到环境变量,或者修改已经存在环境变量

7400

环境变量与命令行参数详解

至于这里为什么要加 呢,因为 PATH 相当于 bash 是一个全局变量,所以用 echo 查看时候要加上 下面我们就来介绍一下环境变量! Ⅰ....默认环境变量放在 ~/.bash_profile ,这是一个用户级环境配置文件,每个用户目录下都会具有各自,在用户每次登录系统时被读取,里面所有命令都会被 shell 执行,包括环境变量配置命令...2、常见环境变量 PATH : 指定命令搜索路径 HOME : 指定用户主工作目录(即用户登陆到Linux系统时,默认目录) SHELL : 当前Shell,通常是 /bin/bash...我们从上图可以看到 liren 用户 HOME 保存是 /home/liren ;而 root 用户 HOME 保存是 /root 。 ​...下面我们用 export 将 myval 变成环境变量,再来试一遍: ​ 可以看见 myval 变成环境变量后,既能用 set 观察到,执行我们上述代码也能拿到环境变量,说明环境变量是可以被子进程

1.3K20

小朋友学Java(3):第一个Java程序

字节码是和平台无关,和C语言编译生成平台相关机器码是不一样。机器码只能在对应系统平台执行,字节码执行是系统平台无关,但是必须有解释器。 (二)执行过程 ?...2 在系统变量,添加JAVAHOME,为“C:\Program Files\Java\jdk1.7.080” ?...若无法执行成功,则需要配置PATH环境变量。 配置步骤如下: 1 首先使用echo $PATH命令来查看,PATH路径包含包含jdkbin目录。 注意,windows系统区分大小写。...(3)用 :wq 退出vi编辑器并保存上面的内容 (4)用source .bash_profile命令激活上面修改后PATH变量 $ source .bash_profile (5)用echo命令查看...JDK路径,是否被包含在PATH变量 $ echo $PATH

1.3K50

Linux 下JDK环境搭建

用记事本打开这个文件,然后在里面最后写上: xiaokang=kangkang 然后保存,这样每次打开一个新terminal时候,我们这个变量就生效了。...好,总结一下他们执行方式: 当 你登录并且登录shell是bash时,bash首先执行/etc/profile文件命令(如果该文件存在),然后顺序寻找~ /.bash_profile,~/.bash_login...或~/.profile文件,并执行找到第一个可读文件命令.当登录bash退出时, 将执行~/.bash_logout文件命令....用户环境建立过程总是先执行/etc/profile然后在读取/etc/environment。为什么会有如上所叙不同呢?...原因应该是jtw所说用户环境和系统环境区别了 如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment)有不同那应该是以用户环境为准了。

1.6K50

Bash 编程

Bash语句写法可能与其他语言有所不同,但使用并无差别。 数组 Bash数组是有序列表 。可以通过将列表赋值给变量名从头创建列表。列表是用圆括号()创建,用空格 分隔列表每个元素。...WHILE循环确实是编程结构“里斯花生酱杯”,结合了部分FOR循环和IF语句。让我们看一个WHILE循环例子,这样你就可以明白意思了: #!...当您在函数创建变量时,这些变量成为全局可访问,这意味着即使在程序结束后,该变量仍然在您shell中保留其 。...不幸是,这种方法存在问题,因为改变了我们可能在shell中使用变量。例如,如果我们在一个名为sum变量存储一些其他重要,我们会通过运行addseq意外地销毁该。...要修改环境变量,我们需要使用export关键字。 首先,让我们在Code目录创建一个名为Commands新目录,在那里我们可以保存可执行脚本。

4.4K30

Shell 脚本避坑指南(一)

如果你能解释清楚上面两段代码输出结果的话, 那大概你可以跳过这篇文章后续内容了。 先来分解下这段代码涉及到主要知识点。 变量声明 变量声明有很多种办法, 但是其行为却各有不同。...bash 算数计算 这部分内容大家想必常会用到。来介绍几种常用方法: 算术扩展 Bash 扩展一共有 7 种,算术扩展只是其中之一。...']' + echo 输入比预设小 输入比预设小 识别未定义变量 以下示例故意写错一个字符。...FD 上 debug.log 文件,注意这个 FD 需要与 BASH_XTRACEFD 配置一致,另外修改了 PS4 变量内容,默认是 + 看起来会比较乱,而且没有有效信息,通过设置...为什么呢?主要是由于在脚本顶部增加 set -e 选项。 该选项在遇到首个 非0 时候会直接退出。

63830

Bash概论 - Linux系列教程补充篇

本篇是最开始学习Linux命令时看一篇帖子,最早见于ChinaUnix (这次查找其出处时发现2002年就有这篇)。学习过程,遇到问题就查一下。...varname=value 注意bash能在等号两侧留空格 shell语言是非类型解释型语言, 给一个变量赋值实际上就是定义了变量, 而且可以赋不同类型。...可以把设置保存到.bashrc或.bash_profile, 成为永久环境变量。 环境变量不限于我们之前讲过可执行程序环境变量、动态库、Python模块环境变量,任何变量都可以。...字符串操作符(替换操作符) ${var:-word}: 如果var存在且不为空, 返回, 否则返回word ${var:=word}: 如果var存在且不为空, 返回, 否则将word赋给var..., 则读取参数到内置变量OPTARG 内置变量OPTIND保存着将被处理命令行参数(位置参数)数值选项列表处理完毕getopts返回1, 否则返回0 如: 在我们推出一步绘图脚本里面,就是使用Bash

1.2K70

Linux 查看环境变量_linux修改jdk环境变量

大家好,又见面了,是你们朋友全栈君。 Linux变量种类 按变量生存周期来划分,Linux变量可分为两类: 1 永久:需要修改配置文件,变量永久生效。...设置变量三种方法 1 在/etc/profile文件添加变量【对所有用户生效(永久)】 用VI在文件/etc/profile文件增加变量,该变量将会对Linux下所有用户有效,并且是“永久”。...2 在用户目录下.bash_profile文件增加变量【对单一用户生效(永久)】 用VI在用户目录下.bash_profile文件增加变量,改变量仅会对当前用户有效,并且是“永久”。...使用unset删除指定环境变量 set可以设置某个环境变量。清除环境变量用unset命令。如果未指定,则该变量值将被设为NULL。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

10K20
领券