Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UNIX,获取环境变量_Unix_Shell_Environment_Echo - Fatal编程技术网

UNIX,获取环境变量

UNIX,获取环境变量,unix,shell,environment,echo,Unix,Shell,Environment,Echo,由于一个可笑的问题,我有一个可笑的问题 通常,如果我想在unixshell中获取环境变量的内容,我可以这样做 echo ${VAR} 让我们假设,由于我的荒谬处境,这是不可能的 在没有人查看命令本身(而不是输出)的情况下,如何将环境变量的内容获取到stdout,以查看环境变量的值 我可以想象这样的解决方案是echo env(NAME\u OF\u VAR),尽管我似乎找不到它。解决方案必须在sh中工作 PS我不能为此编写脚本,它必须是内置的unix命令(我知道,这是一个荒谬的问题) 谢谢(为这

由于一个可笑的问题,我有一个可笑的问题

通常,如果我想在unixshell中获取环境变量的内容,我可以这样做

echo ${VAR}
让我们假设,由于我的荒谬处境,这是不可能的

在没有人查看命令本身(而不是输出)的情况下,如何将环境变量的内容获取到stdout,以查看环境变量的值

我可以想象这样的解决方案是
echo env(NAME\u OF\u VAR)
,尽管我似乎找不到它。解决方案必须在sh中工作

PS我不能为此编写脚本,它必须是内置的unix命令(我知道,这是一个荒谬的问题)

谢谢(为这荒谬的事感到抱歉)

这个怎么样:

myVariable=$(env  | grep VARIABLE_NAME | grep -oe '[^=]*$');

你的意思是这样的:

ENV() {
    printf 'echo $%s\n' $1 | sh
}
这在普通的旧Bourne shell中有效。

您可以执行以下操作:


printenv VARIABLE\u NAME

解决方案实际上取决于什么是限制,为什么不能使用简单的
$VAR
。也许您可以调用一个没有限制的shell,让这个子shell计算变量:

bash -c 'echo $VAR'

在终端中键入以下命令,它将显示所有环境变量列表

printenv

现在按如下方式打印所需变量:

ENV() {
    printf 'echo $%s\n' $1 | sh
}
echo$VARIABLENAME

( set -o posix ; set ) | grep $var

使用
${!VAR_NAME}
搜索所有已使用的unix兼容格式变量

> FOO=BAR123
> VAR_NAME=FOO
> echo ${VAR_NAME}
FOO
> echo ${!VAR_NAME}
BAR123

实际上,你最好在结尾使用cut,例如…|迈克,你没事吧?黑手党在仓库里用枪指着你的头吗?这是求救吗?有什么问题吗?一个“{”不可见/无法访问的键盘?@Tim.我的情况几乎就那么糟糕。但现在,我可以做一个简短的回答,工作中的紧急错误修复。这个地方的做法很糟糕(今年的轻描淡写)。其目的是确保用户不会看到本应隐藏的密码。以前的开发人员设置了此设计,以便通过stdin将纯文本密码传递给应用程序。一想到它,我就恶心。无论如何,我能够使用skwllsps建议。这是一个可怕问题的可怕修复,导致了可怕的错误e公司制造可怕的软件。另一个有用的情况是:在Windows上,环境变量可能包含括号,而您不能这样做,例如,
echo${ProgramFiles(x86)}
,因为shell将尝试进行替代。但是
printenv'ProgramFiles(x86)
可以工作。我会用更多的话引用自己:
ENV(){printf'printf“%%s\\n”“${%s}”\n'$1“| sh;}
Ooh,来自/usr/ucb的东西。令人印象深刻。在StackOverflow上不鼓励只使用代码的答案。请尝试详细说明为什么这是一个正确的答案始终记得在您发布的答案中添加解释,以便用户能够理解它的用法。@user3061097