如何从'中读取环境变量中的值:'在它的名字?

时间:2017-03-24 15:14:29

标签: bash elastic-beanstalk

我们正在使用弹性豆茎。某些值是环境的环境属性。当我执行container_command我能够将此属性作为环境变量读取时。问题如下:许多属性的命名方式如此db:usercollector:server以及之后的值。

如何阅读此值?我可以将它们解释为环境变量。所以具有“正常”的环境属性'我能读的名字。但不是那些包含':'在他们的名字中:

要测试(+让那些不了解弹性豆茎的人更清楚)我已经创造了这个。全局目标是读取包含':'的变量的值。以它的名字。

#!/bin/bash

${myvar:test}="hey" 
echo ${myvar:test}

$./test.sh
$./test.sh: line 3: =hey: command not found

1 个答案:

答案 0 :(得分:0)

:根本不是shell变量中的允许字符,而${test:foo}具有完全独立的含义(它会将$test扩展为默认值{{1}如果没有定义名为foo的变量。)

但是,如果您的操作系统是Linux,则可以直接从procfs解析原始环境变量:

test

请注意,要对此进行测试,您需要能够使用文字冒号实际创建环境变量,并且您的代码目前无法执行此操作。请考虑一下:

#!/usr/bin/env bash

declare -A env=( )   ## <- note that this requires bash 4.0 or newer

while IFS= read -r -d '' envvar; do
  [[ $envvar = *:* ]] || continue
  varname=${envvar%%=*}
  value=${envvar#*=}
  env[$varname]=$value
done < /proc/self/environ

echo "The value of the environment variable db:user is: <<${env[db:user]}>>"