根据字符串str获取对应变量名的shell变量值
18 March 2014
问题:一个shell变量名为foo,另外一个变量key的值为"foo",需要根据变量key的值来读取上下文中变量名为该key的值value。这种JS中就是window[key]
,但在shell中怎么实现呢?
我最先想到的是${$key}
,但是报错bash: ${$key}: bad substitution
,随后各种折腾都没搞定。最后求助发布团队的同事,给的方案是:eval echo "$"$key
,在cli模式下还可以用eval echo \$$key
foo="bar" key="foo" eval echo "$"$key #>bar
or
foo="bar" key="foo" eval echo \$$key #>bar
真实场景大约是这样的:
fields=("vo" "url" "where" "browser" "location") vo="" url="www.iqiyi.com" where="Local" browser="Firefox" location="Local-WPTDriver:Firefox.Cable" wdDown=5000 wdUp=1000 latency=28 curlFormOpts="" for field in ${fields[@]} do curlFormOpts=${curlFormOpts}" -F "${field}"="`eval echo "$"$field` done echo $curlFormOpts #>-F vo= -F url=www.iqiyi.com -F where=Local -F browser=Firefox -F location=Local-WPTDriver:Firefox.Cable
完。
2014-08-04 补充:
其实 ${!key}
就能满足需求的。
advanced bash-scripting guide中的9.5 Indirect References就是专门讨论这个问题的。
blog comments powered by Disqus