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.