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

发布于 2021-01-31 22:36:04

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

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

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

关注者
0
被浏览
83
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    您可以使用以下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;
    }
    


推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看