我必须打印一个变量值,它是art变量。例如:变量为
A = X
Z_X = Test在shell中使用
setenv A X
setenv Z_X Test我想使用$A打印$Z_X值
我正在尝试,但没有任何成功。
echo ${Z_${A}}
echo ${Z_[$A]}有人能告诉我我哪里错了吗?
问候
发布于 2014-12-23 00:23:03
A=X
Z_X =测试
这似乎是错误的;在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这是我能想出的唯一安全的方法来做你想要的。
发布于 2014-12-22 21:58:43
一般来说,这不是一个好主意,你应该重新考虑你的方法。
名称回显${!name=Z_$A }
从手册中:
如果参数的第一个字符是感叹号(!),则会引入一定级别的变量间接寻址。Bash使用由参数的其余部分组成的变量的值作为变量的名称;然后扩展该变量,并在替换的其余部分中使用该值,而不是参数本身的值。这就是所谓的间接扩展。下面描述的${!prefix*}和${!name[@]}的扩展是个例外。感叹号必须紧跟在左大括号后面,才能引入indirection.
name=Z_$A评估回显\$$名称
你可以在指南中找到更多关于indirect references的信息。
https://stackoverflow.com/questions/27604063
复制相似问题