shell - 变量的变量

标签 shell unix echo csh

我必须打印一个变量值,它是艺术变量。 例如。变量是

A = X
Z_X = Test

在 shell 中使用

setenv A X
setenv Z_X Test

我想使用 $A 打印 $Z_X 值

我正在尝试,但没有成功。

echo ${Z_${A}}
echo ${Z_[$A]}

谁能告诉我哪里错了。

问候

最佳答案

A = X
Z_X = Test

这似乎是错误的;在csh中,需要使用set关键字来赋值变量;此外,约定还对“普通”变量使用小写,对环境变量使用大写:

set a = x
set z_x = Test

然后您可以使用 eval 得到您想要的:

% eval echo \$z_$a
Test

% set x = `eval echo \$z_$a`
% echo $s
Test

如果您不信任 $a 的来源,这可能是危险的,因为它也可能执行 rm -rf/或类似危险​​的东西(但如果你相信 $a 的来源,那完全没问题)。

您可以使用 set 获取所有变量的列表:

% set | grep ^z_$a
z_x     Test

% set | grep ^z_$a | awk '{print $1}'
z_x

这是唯一安全的方式,我可以想出做你想做的事。

关于shell - 变量的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27604063/

相关文章:

c++ - Shell Sort 将数组元素替换为 -858993460

macos - 如何解决 Mac OS X 上 iconv 的奇怪问题

java - 为什么当我输入 "ps -ef | grep java"时,Linux 操作系统上的 java 进程在 java 命令中没有显示 -classpath?

c - 如何包含 openssl/md5 库的对象文件?

linux - Unix Shell - Zip 命令

php - 使用与搜索匹配的结果重新填充结果表

linux - AWS Linux CloudWatch - 前 5 个进程和内存消耗的指标

linux - 需要在 shell 脚本中剪切部分字符串

php - 在 PHP 中编写 PHP 代码

php - 在 MySql 中获取资源 ID #3 错误