一尘不染

如何在bash中访问名称中带有空格的环境变量?

jenkins

运行env将返回“ Clear Workspace = true”。如何在bash中访问它?仅供参考,它来自Jenkins Parameterized
Build参数名称。${Clear Workspace}似乎不起作用。

而且,詹金斯怎么能创建这个环境变量?Clear Workspace=true在bash中运行显然不起作用,因为它尝试使用参数“ Workspace =
true”运行“ Clear”命令。

我当然可以将作业参数名称设置为Clear_Workspace,但是它以一种形式呈现给用户,所以我宁愿不这样做。另外,用于Jenkins的Maven
Build插件具有多个参数名称,其中包含空格,因此必须可以通过某种方式访问​​它们。


阅读 300

收藏
2020-07-25

共1个答案

一尘不染

您可以使用以下env命令来模拟这种乐趣

env Clear\ Workspace=true bash

这将为您提供一个设置了环境变量的shell。

一种获取环境变量值的怪异方法是:

declare -p Clear\ Workspace | sed -e "s/^declare -x Clear Workspace=\"//;s/\"$//"

除此之外,您还需要使用本机代码程序或脚本语言将其提取出来,例如

ruby -e "puts ENV['Clear Workspace']"

如果您没有红宝石,那么它的hacky要少得多。

perl -e 'print "$ENV{\"Clear Workspace\"}\n";'

python -c 'import os; print os.environ["Clear Workspace"]'

这是本机代码版本:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv, char **envp) 
{
  char **env;
  char *target;
  int len;
  if (argc != 2) 
  {
    printf("Syntax: %s name\n", argv[0]);
    return 2;
  }
  len = strlen(argv[1]);
  target = calloc(len+2,sizeof(char));
  strncpy(target,argv[1],len+2);
  target[len++] = '=';
  target[len] = '0';
  for (env = envp; *env != 0; env++) 
  {
    char *thisEnv = *env;
    if (strncmp(thisEnv,target,len)==0)
    {
      printf("%s\n",thisEnv+len);
      return 0;
    }
  }
  return 1;
}
2020-07-25