当前位置: 首页 > 面试题库 >

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

乐刚毅
2023-03-14
问题内容

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

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

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


问题答案:

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


 类似资料:
  • 问题内容: 我正在尝试编写脚本,将大照片裁剪并调整为高清壁纸。 但是该脚本似乎在文件名中带有空格的问题(例如Tumble Weed.jpg)。我怎样才能解决这个问题? 问题答案: 首先,您不需要。通过在backtics中使用,您可以使bash隐式地将字符串解析为一个列表,该列表按空格分隔。而是让bash生成列表并将其分离,而无需进行此类怪癖: 另外,您需要将所有用法都括在引号中,以使bash整体上

  • 我现在正在尝试将整个目录从一个集群镜像复制到另一个集群。但是当名称中有一个空格时,它失败了,我不知道如何解决这个问题,因为scp似乎认为我在复制多个文件。我正在使用一个变量来标记我需要的路径,所以添加反斜杠似乎不容易解决。 这是我正在使用的代码: 我试过单引号、双引号和单引号加双引号,都不行。有人能帮我解决吗?顺便说一下,代码中的mkdir语句是有效的。

  • 文件路径类似于C:\test\NPP\223083-A\u BELI Frenchips Poulet roti face。eps 该命令适用于文件名中没有空格但带有空格的文件,它给出的错误如下: {转换:无法打开图像'C:\test\NPP\223083-A_BELI':没有这样的文件或目录@error/blob. c/OpenBlob/3094.convert:没有此图像格式的解码委托'@er

  • 我有一个values.yaml,我将一个值存储在一个属性中,还有一个deployment.yaml,我尝试将该值赋给一个环境变量。问题是属性名包含破折号,并抛出以下错误消息。 “空值”是因为我试图将名称引用为 {{ Values.security.enablemockservice | 引号 }},而不使用缓行绑定的破折号,但实际的属性名称是 Values.security.enable-mock

  • 问题内容: 有谁知道如何在Java中访问标准Shell环境的环境变量?我正在使用ProcessBuilder类,并且必须指定正在运行的Shell脚本中使用的特定环境变量,这些变量存在于标准Shell环境中。 访问ProcessBuilder环境不起作用。 问题答案: 您可以通过以下方法获取创建程序时存在的环境变量: http://download.oracle.com/javase/tutoria

  • 是否可以从一个地方访问不同应用。属性的环境变量。实际上,我们正在构建这个软件,我们有不同的应用。不同项目的属性,如用户资产。因此,是否有可能将所有环境变量放在一个外部位置。如果是,将如何访问?