2014-10-06 73 views
1

有没有办法在不使用eval的情况下为纯shell中的动态命名变量(即sh,而不是bash)分配任意值?不使用eval的纯shell中的动态变量赋值

我想知道是否有办法避免使用eval,因为它可以允许任意代码执行。

let似乎只适用于数值。

+1

你能澄清你的要求吗?在你接受的答案中的'declare'命令不是“纯粹的shell”,因为它是一个'bash'扩展,不是POSIX'sh'的一部分。 – chepner 2014-10-06 16:13:06

回答

1

试试declare:它允许您在运行中指定变量。

v="test" 
declare my$v="hello" 
echo "$mytest" 

返回:

hello 

可以在man declare找到更多的信息 - 我无法找到的Shell手册的参考。

+0

@rhlee你是什么意思的“纯壳”? 'declare'是一个'bash'扩展名,并不适用于每个POSIX兼容的shell。 – chepner 2014-10-06 15:53:15

+0

@chepner在这个问题上更好的评论,因为rhlee不会在这里得到通知。 – fedorqui 2014-10-06 15:58:19

+0

@chepner是的我昨天发现了纯粹和非纯粹的炮弹之间的区别。该脚本在cygwin上运行良好,但在linux上给了我'declare:not found'。我遇到了https://wiki.ubuntu.com/DashAsBinSh,它告诉我使用'local'而不是'declare'。然而,我得到了'local:不在函数中',所以我将整个脚本包装在一个函数中,并且调用它并且一切正常。我认为fedorqui的答案仍然算是正确的答案,因为我没有指定纯粹的shell。 – rhlee 2014-10-07 15:19:33