gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:48:30 28 4
gpt4 key购买 nike

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

另外,Jenkins 是如何创建这个环境变量的?在 bash 中运行 Clear Workspace=true 显然是行不通的,因为它试图运行参数为“Workspace=true”的“Clear”命令。

我当然可以将作业参数命名为 Clear_Workspace,但它以一种形式呈现给用户,所以我宁愿不这样做。此外,Jenkins 的 Maven 构建插件有几个参数名称中包含空格,因此必须能够以某种方式访问​​它们。

最佳答案

你可以用env命令来模拟这个乐趣

env Clear\ Workspace=true bash

这将为您提供一个带有环境变量集的 shell。

一个 hacky 的方法,应该适用于 bash 4.0,以获取环境变量值:

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

从 4.0 开始的 Bash 版本将返回错误,并且无法以这种方式提取此类环境变量。

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

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

这不那么骇人听闻......即使你没有 ruby

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;
}

关于bash - 如何在 bash 中访问名称中有空格的环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18468397/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com