How can you access an environment variable that has a space in its name in bash? How can you access an environment variable that has a space in its name in bash? jenkins jenkins

How can you access an environment variable that has a space in its name in bash?


You can simulate this bit of fun with the env command

env Clear\ Workspace=true bash

That will give you a shell with the environment variable set.

A hacky way, which should work up to bash 4.0, to get the environment variable value back out is:

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

Bash versions starting with 4.0 will instead return an error and are unable to extract such environment variables in that way.

Other than that you'd need to use either a native code program or a scripting language to pull it out, e.g.

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

Which is much less hacky... also if you don't have ruby

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

also

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

And here is a native code version:

#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 is not the only language that can manipulate the environment:

$ perl -e '$ENV{"Clear Workspace"}="true"; system "env"' | grep ClearClear Workspace=true

If you're in a shell, you can always parse the output of env (untested)

value=$(env | while IFS="=" read -r var value; do                  if [[ $var = "Clear Workspace" ]]; then                      echo "$value"                      break                  fi              done )


Jenkins is probably creating something other than an environment variable.

You cannot have spaces in environment variables. Quoting http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html:

Environment variable names used by the utilities in the Shell and Utilities volume of IEEE Std 1003.1-2001 consist solely of uppercase letters, digits, and the '_' (underscore) from the characters defined in Portable Character Set and do not begin with a digit.