我正在使用bash
shell。我有一些我想要提取的env
值,并将这些值分配给变量。我还需要将其拆分为=
符号。什么是使用bash的最佳效用?
我基本上需要创建一个字符串,这些值也会剥离分隔符:
echo -e "This is my $KEY and my profile is $PROFILE"
This is my Ru2cXJbgWQ0wdtKBGbS5/nVQvGo and my profile is foobar
结果:
-bash-4.1$ echo -e "This is my $KEY"
This is my
-bash-4.1$ env | grep KEY
KEY=Ru2cXJbgWQ0wdtKBGbS5/nVQvGo
示例:
$ env | grep KEY
KEY=Ru2cXJbgWQ0wdtKBGbS5/nVQvGo
$ env | grep DEFAULT_PROFILE
DEFAULT_PROFILE=foobar
答案 0 :(得分:4)
补充Anthony Geoghegan's helpful answer,表示Bash 自动表示环境变量为 shell 变量 [1] :
简而言之: env | grep KEY
返回KEY=Ru2cXJbgWQ0wdtKBGbS5/nVQvGo
的事实并不一定意味着名为KEY
的环境变量存在。
可以想象您获得的grep
匹配是其他环境变量'值的匹配,甚至是多行变量 name 的最后一行。 谢谢,chepner。
虽然环境变量和值通常是单行,但它们不一定是。一个例子是Bash自己导出函数的能力,其通常多行定义被导出为特别命名的环境变量的值。
要验证给定(Bash) shell 变量确实基于环境变量,请使用:
declare -p KEY # example with variable name 'KEY'
如果KEY
确实是一个环境变量,你会看到(使用你的例子):
declare -x KEY="Ru2cXJbgWQ0wdtKBGbS5/nVQvGo"
请注意-x
,表示导出的变量,该变量与 environment 变量同义。
相比之下:
如果KEY
是 shell 变量,而该变量不是环境变量,则-x
将会丢失。
如果KEY
既不是shell变量也不是环境变量,您将看到错误消息。
anubhava,在对该问题的评论中,演示了与shell无关的方法来测试是否定义了环境变量:
printenv KEY # prints value of env. var. 'KEY'
退出代码0
告诉您该变量存在(即使它没有值)。
请注意printenv
是一个不符合POSIX标准的外部实用程序;但是,它配备了Linux和BSD / OSX。
[1] 请注意,通过使用Bash自己的字符串扩展(双引号字符串的插值),扩展的内容不仅是 environment 变量引用,还包括shell - 仅变量引用。相比之下, GNU 实用程序envsubst
允许您将扩展限制为环境变量。
答案 1 :(得分:2)
当Bash启动时,它继承的每个环境变量都会自动创建为shell变量aka参数。从Bash手册页:
当调用程序时,会给出一个称为环境的字符串数组。这是一个名称 - 值对列表,其格式为
name=value
。shell提供了几种操作环境的方法。在调用时,shell会扫描自己的环境,并为找到的每个名称创建一个参数,自动将其标记为导出到子进程。
如果KEY
和PROFILE
是环境变量,则运行
echo -e "This is my $KEY and my profile is $PROFILE"
应打印所需的回复。