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

传递给bash脚本的环境变量在函数内为空

是因为函数在bash脚本中创建了一个子shell,子shell会继承父shell的环境变量,但是在函数内部对环境变量的修改不会影响到父shell的环境变量。

为了解决这个问题,可以使用export命令将环境变量导出到子shell中。具体步骤如下:

  1. 在bash脚本中定义需要传递的环境变量,例如:
  2. 在bash脚本中定义需要传递的环境变量,例如:
  3. 在调用函数之前,使用export命令将环境变量导出到子shell中,例如:
  4. 在调用函数之前,使用export命令将环境变量导出到子shell中,例如:
  5. 在函数内部即可访问到导出的环境变量,例如:
  6. 在函数内部即可访问到导出的环境变量,例如:

这样就可以在函数内部正确地访问到传递给bash脚本的环境变量了。

关于bash脚本和环境变量的更多信息,可以参考腾讯云云服务器CVM产品的文档:

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

相关·内容

bash 变量和参数

VARIABLE= value # 脚本将会尝试运行 "value" 命令,同时设置环境变量 "VARIABLE" ""。 上面 $b 和 $c 区别?...but empty'; # 设置但 else echo 'b is not set'; # 没设置,如 c fi ``` 变量中空格 e=1 2 3 # 报错,变量中间当然不能有空格 e=...转义,变量不会被替换 变量类型 这里当然不是说字符串、整形什么,其实 bash变量都可以理解字符串。 bash 中有四种类型变量,它们是环境变量、本地变量、位置变量和特殊变量。...环境变量 参看维基百科环境变量,这里不做赘述。 本地变量 我们上面的那么多例子其实就是本地变量。 本地变量作用域当前脚本。有一个子类,局部变量,作用域是当前代码块,比如函数变量。...echo "${10}" 特殊变量 变量 含义 $$ 表示当前 Shell 进程 ID ,即 pid $n 上述位置变量 $# 传递给脚本函数参数个数 $* 传递给脚本函数所有参数 $@ 传递给脚本函数所有参数

1.4K00
  • 写好Shell脚本那些不得不知道细节

    1.环境变量 Shell执行环境由一系列环境变量组成,这些变量是由shell维护和管理,变量名由大写字母或数字组成,可被用户重新定义。...如: "$#" 记录传递给shell自变量个数 "$*" 传递给脚本函数所有参数 $* 和 $@ 都表示传递给函数脚本所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n"...若 $file 没设定,则回 txt ,并将 $file 赋值txt,值及非值不作处理 ${file:=txt} 若 $file 没设定或值,则回 txt ,将 $file...exit类似,作用是跳出函数函数中使用 exit会退出整个shell脚本,而不是退出函数; exitn:退出当前shell程序,n返回值 returnn:用于函数中,n是函数返回值,用于判断函数执行是否正确.../等形式相对变量,使用之后脚本移植性将变得极差,另外如果脚本放在crontab运行,相对路径基本无法识别。

    1.9K10

    bash 变量和参数

    VARIABLE= value # 脚本将会尝试运行 "value" 命令,同时设置环境变量 "VARIABLE" ""。 上面 $b 和 $c 区别?...but empty'; # 设置但 else echo 'b is not set'; # 没设置,如 c fi ``` 变量中空格 e=1 2 3 # 报错,变量中间当然不能有空格 e=...转义,变量不会被替换 变量类型 这里当然不是说字符串、整形什么,其实 bash变量都可以理解字符串。 bash 中有四种类型变量,它们是环境变量、本地变量、位置变量和特殊变量。...环境变量 参看维基百科环境变量,这里不做赘述。 本地变量 我们上面的那么多例子其实就是本地变量。 本地变量作用域当前脚本。有一个子类,局部变量,作用域是当前代码块,比如函数变量。...echo "${10}" 特殊变量 变量 含义 $$ 表示当前 Shell 进程 ID ,即 pid $n 上述位置变量 $# 传递给脚本函数参数个数 $* 传递给脚本函数所有参数 $@ 传递给脚本函数所有参数

    1.1K30

    Shell脚本学习1

    环境变量 :所有的程序,包括shell启动程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要时候shell脚本也可以定义环境变量。...特殊变量 变量 含义 $0 当前脚本文件名 $n 传递给脚本函数参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 $# 传递给脚本函数参数个数。...$* 传递给脚本函数所有参数。 $@ 传递给脚本函数所有参数。被双引号(" ")包含时,与 $* 稍有不同 $? 上个命令退出状态,或函数返回值。 $$ 当前Shell进程ID。...* 和 @ 区别: * 和 @ 都表示传递给函数脚本所有参数,不被双引号(" ")包含时,都以"1" " 但是当它们被双引号(" “)包含时,”2 … n"形式输出所有参数;“@” 会将各个参数分开.../bin/bash a=11 echo "a is $a \n" echo -e "a is $a \n" a is 11 \n a is 11 6、命令替换 变量替换可以根据变量状态(是否

    31220

    Linux:进程替换

    加载器理解: argv这个参数会被传递给ls,其实exec系列接口含义也是如此,命令行参数中,有所进程都是bash子进程,所以exec其实就是一个代码级别的加载器,他可以做到将可执行程序代码和数据导入到内存中...,然后再调用main函数时候将argc参数传递给程序,其实就相当于是你执行该程序之前,优先给你加载出来一个栈帧结构。...脚本语言不是脚本跑,而是由解释器来解释执行 我们想要执行脚本文件的话,路径就不是脚本文件,而是脚本文件解释器, bash+test.sh则是作为命令行参数。 ...(1)任何语言都有像exec这类接口 (2)语言可以互相调用原因是 无论是什么语言写程序 操作系统看来都是进程 1.5.3 将命令行参数和环境变量递给另一个程序  环境变量子进程创建时候就默认继承了...1.5.4 子进程环境变量处理 1、新增环境变量——>putenv          如果我们想给子进程创建新环境变量,之前我并不想在bash上搞,因为bash上搞的话所有进程都会被影响。

    12110

    Linux基础(五)

    .来表示,用于脚本代码中调用通过命令行参数传递给参数 特殊变量:$?...declare -r name declare -ir name ( i表示数字 ) 查看:readonly -p 例如:PI = 3.1415926 位置变量:脚本代码中调用通过命令行传递给脚本参数.......") $@ :传递给脚本所有参数,每个参数独立字符串 ( "string1" "string2" "string3" ... ) $# :传递给脚本参数个数 $@ $* :只有在被双引号引起来时候才会有差异...etc/profile --> /etc/profile.d/*.sh(登录就会执行,如果你想要配置服务开机执行什么脚本就可以放在这里)*/ --> ~/.bash_profile (放环境变量)--...(别名和函数本地变量) --> /etc/bashrc --> /etc/profile.d/*.sh .bash_profile:定义环境变量和开机启动项 source (.) scriptnaem

    1.2K80

    Linux笔记(8)| Shell脚本编程

    :传递给脚本函数参数,n是一个数字,表示第几个参数 例如第一个参数是1,第二个参数是2。...$#:传递给脚本函数参数个数 $*:传递给脚本函数所有参数 @:传递给脚本函数所有参数,当被双引号""包含时, $?...:上个命令退出状态或者获取函数返回值 $$:当前shell进程ID,对于Shell脚本,就是这些脚本所在进程ID 8、字符串拼接 var=$(pwd)aaa 并排放,直接加在后面 9、...-n str:判断字符串str是否 =和==:判断字符串str是否相等 -d filename:判断文件是否存在,并且是否command1目录文件 -f filename:判断文件是否存在,并且是否普通文件...my_name #调用函数 19、环境变量 全部用户、全部进程共享变量:/etc/bash.bashrc 一个用户、全部进程共享变量:~/.bashrc Shell

    94730

    Shell base用法描述

    bash是Linux和Unix下shell。 本教程关注Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 日常工作中被广泛使用。...环境变量:::所有的程序,包括shell启动程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要时候shell脚本也可以定义环境变量。...字符串 字符串定义 bash字符串可以用单引号和双引号,其区别就是,单引号不能解释变量,而双引号可以解释变量 name="jianjian" echo '$name' echo "$name"...参 使用方法 我们使用脚本文件时候可以向文件中传递一些参数,脚本则可以使用n这种方式来获取参数,n这种方式来获取参数,0代表文件名,1代表是第一个参数,1代表是第一个参数,2代表第二个参数,以此类推...return .... } 参数列表 与文件参类似,函数也是使用相同语法来参,取参 test(){ echo 第一个参数$1 echo 第二个参数$2 ...

    32820

    bash脚本编程

    =value “导出” varname=value export varname 脚本执行时会启动一个子shell进程, 命令行中启动脚本就会继承当前shell环境变量 系统自动执行脚本...可以自定义回码(命令执行状态码),没有跟数字,默认最后一次执行状态码。...bash变量类型: 本地变量(局部变量):作用域只是当前shell 环境变量:作用域是当前shell,及其子shell 位置变量:$1,$2,$3.... shift:轮替 位置参数轮替。...> < => <= -n string :测试指定字符串是否真,不假。 -s string :测试指定字符串是否假,不真。 #!/bin/bash if !...执行状态结果 bash -x *.sh 逐步执行显示 注意:执行结果,状态结果 函数执行状态结果是最后一条命令执行结果状态返回值。

    1.3K30

    shell脚本编程之路3

    Shell 函数必须先定义后使用 Shell 函数与其他高级语言函数有相似之处,也有返回值、删除函数终端调用函数(参和递归)等等....如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数计算结果,脚本需要时候访问这个变量来获得函数返回值 实际案例: #!...#执行结果# [返回空值] this is aa, this is bb this is cc 函数返回值:0 函数参数 Shell中,调用函数时可以向其传递参数,函数体内部,通过 n 形式来获取参数值...# 传递给函数单个参数 } funWithParam 1 2 3 4 5 6 7 8 9 34 73 #注意这里传递给函数参数 WeiyiGeek.函数参数传递 递归函数 bash也支持递归函数...来获取执行结果; shell中函数参与脚本参是一致,但是得注意 $0 代表任然是父脚本名称; 删除函数 描述:像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项,如下所示

    3.3K10

    学好大数据开发基础是什么?

    shell文件行首,作为include标记,#!/bin/bash;其他地方作为注释使用 5. ;分号 语句分隔符。shell文件一行写多条语句时,使用分号分割。 6. ;; 双分号。...使用case选项时候,作为每个选项终结符。Bash version 4+ 时候,还可以使用[;;&], [;&] 7. .英文句点号 命令等价于source, . 表示当前目录 ...../bin/bash; . data-file#包含data-file; (2)作为文件名一部分,文件名开头,表示该文件隐藏文件,ls一般不显示出来(ls -a 可以显示); (3)作为目录名,一个点代表当前目录...当前脚本名称 16. $# 传递给脚本函数参数个数 17. $* 传递给脚本函数所有参数 18. $@ 传递给脚本函数所有参数。...上个命令退出状态,或函数返回值。 20. $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在进程ID。 21. $n 传递给脚本函数参数。

    85520

    shell编程基础

    /文件名.sh创建shell脚本文件创建shell脚本文件时,必须在文件第一行指定要使用shell。其格式:#!/bin/bash通常shell脚本中,井号(#)用作注释行。...2) 环境变量 所有的程序,包括shell启动程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要时候shell脚本也可以定义环境变量。...(哪个字母先出现就计算哪个)echo `date`双引号里可以出现转义字符传递参数执行 Shell 脚本时,向脚本传递参数,脚本获取参数格式:$n。...该脚本会获取dbl函数输出,而不是查看退出状态码。函数中使用变量函数可以使用标准参数环境变量来表示命令行上传给函数参数。...函数中处理变量全局变量:shell脚本中任何地方都有效变量。默认情况下,你脚本中定义任何变量都是全局变量。局部变量:无需函数中使用全局变量,函数内部使用任何变量都可以被声明成局部变量。

    77130

    Linux Shell编程入门

    bash完全兼容sh,也就是说,用sh写脚本可以不加修改bash中执行。...2) 环境变量 所有的程序,包括shell启动程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要时候shell脚本也可以定义环境变量。...一般Shell变量名只能包含数字、字母和下划线,因为某些包含其他字符变量有特殊含义,这样变量被称为特殊变量。 特殊变量列表 变量 含义$0当前脚本文件名$n传递给脚本函数参数。...$#传递给脚本函数参数个数。$*传递给脚本函数所有参数。$@传递给脚本函数所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。$?上个命令退出状态,或函数返回值。...如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数计算结果,脚本需要时候访问这个变量来获得函数返回值。 调用函数只需要给出函数名,不需要加括号。

    3.1K10

    Shell 简明教程

    2. bash 启动 bash 启动脚本bash 启动时会自动执行脚本,因此用户可以把一些环境变量设置和 alias、umask 设置等放到启动脚本中,这样每次启动 shell 时都会自动生效。...如果终端或远程登录,那么登录 Shell 是该用户所有其他进程父进程,所以环境变量登录 Shell 启动脚本里设置一次就可以自动带到其他非登录 Shell 里,而本地变量、函数、 alias 等设置没有办法带到子...Shell里,需要每次启动非登录Shell时设置一遍,所以就需要有非登录Shell启动脚本,所以一般来说 ~/.bash_profile 里设置环境变量 ~/.bashrc 里设置本地变量、函数...非交互式启动 为了执行脚本而 fork 出来子 Shell 是非交互式 Shell,启动时执行脚本文件有环境变量 BASH_ENV 定义,相当于执行下面的命令: if [ -n "$BASH_ENV...Shell函数没有参数列表并不表示不能参数,事实上,函数就像是迷你脚本,调用函数时可以任意个参数,函数同样是用 0 、 1 、 2 等变量来提取参数,函数位置参数相当于函数局部变量,改变这些变量并不会影响函数外面的

    2.1K40

    Spark源码分析之Spark Shell(上)

    onExit 其实这个脚本只能看出来是调用了spark-submit,后续会再分析一下spark-submit作用(它里面会调用spark-class,这才是执行方法最终执行者,前面都是参而已)。....; pwd)" fi 这句很多启动脚本中也比较常见,即获取应用主目录。...if [ -z $string ] 如果string if [ $sting ] 如果string 非,返回0 (和-n类似)...所以上面的那句判断,就是检查${SPARK_HOME}是否意思。...首先$0是shell中变量符号,类似的还有很多: $# 是传给脚本参数个数 $0 是脚本本身名字 $1 是传递给该shell脚本第一个参数 $2 是传递给该shell脚本第二个参数 $@ 是传给脚本所有参数列表

    1.2K100

    shell编程基础入门

    , 用户环境变量~/.bash_profile ~....也可在/profile.d/xx.sh 如可写echo “xxx自定义提示信息”。即可加入x执行权限。注意:定时任务。环境变量需要重新定义。 (1)....删除变量: unset 如:unset your_name Shell特殊变量: 特殊变量列表变量含义$0当前脚本文件名$n传递给脚本函数参数。n 是一个数字,表示第几个参数。...$#传递给脚本函数参数个数。$*传递给脚本函数所有参数。$@传递给脚本函数所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。$?上个命令退出状态,或函数返回值。...$* 和 $@ 都表示传递给函数脚本所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 形式输出所有参数。

    1.3K40

    Shell特殊字符

    我们最长见应该算是bash了。 2.Shell常见特殊字符 Shell特殊字符非常繁杂,各种特殊符号我们编写Shell脚本时候如果能够用得好,往往能起到事半功倍效果。...2.1 特殊变量 序号 符号 作用 示例 1 $0 当前脚本名称 2 $# 传递给脚本函数参数个数 3 $* 传递给脚本函数所有参数 4 $@ 传递给脚本函数所有参数。...上个命令退出状态,或函数返回值。 6 $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在进程ID。 7 $n 传递给脚本函数参数。n 是一个数字,表示第几个参数。...如果变量 var 或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。若此替换出现在Shell脚本中,那么脚本将停止运行。...var=/home/centos;echo ${var//o/h}结果/hhme/cenths 31 $[] 整数扩展(integer expansion),方括号执行整数表达式并返回结果。

    5.2K10

    shell 教程,这次我要步步详解,学会了以后能早点下班

    :后台运行最后一个进程pid $_:之前命令最后一个参数 shell 中变量还有一点特性,可以设置默认值,即为了防止一些意外导致变量成为值而导致脚本崩溃。...当 Shell 子进程产生时,它会继承父进程环境变量自己所用,所以说环境变量可从父进程传给子进程。不难理解,环境变量还可以传递给孙进程。...注意,两个没有父子关系 Shell 进程是不能传递环境变量,并且环境变量只能向下传递而不能向上传递,即“传子不父”。...注意:执行时要赋权限 补充知识点: 一个规范Shell脚本第一行会指出由哪个程序(解释器)来执行脚本内容,这一行内容Linux bash编程一般: #!/bin/bash 或 #!.../bin/sh shbash软链接,大多数情况下,脚本开头使用“#! /bin/bash”和“#! /bin/sh”是没有区别的。

    4.2K20

    【Linux】详谈命令行参数&&环境变量

    main函数第一个参数argc,参数类型int,第二个参数argv,参数类型char*类型指针数组(也叫命令行参数表),该指针数组以NULL结尾。...解释器还会计算选项数量,并将其作为argc值传递给main函数。命令行解释器会负责将这些信息正确地传递给程序main函数,以便程序能够使用它们。...8 printf("%d, %s\n", i, argv[i]); 9 } 10 return 0; 11 } 有了命令行参数表,我们就可以通过命令行中不同选项...三、main函数第三个参数 其实main函数最多可以传递三个参数,第三个参数叫env,参数类型同样char*指针数组,env数组中保存正是该进程拥有的环境变量。...env表起始地址传递给我们程序main函数env参数,此时我们进程也就拿到了父进程给我们环境变量

    34910
    领券