Bash中的动态变量名

Bash中的动态变量名

我对巴什剧本很困惑。

我有以下代码:

function grep_search() {
    magic_way_to_define_magic_variable_$1=`ls | tail -1`
    echo $magic_variable_$1}

我希望能够创建一个变量名,其中包含命令的第一个参数,并带有例如ls.

为了说明我想要的

$ ls | tail -1stack-overflow.txt

$ grep_search() open_box
stack-overflow.txt

那么,我应该如何定义/声明$magic_way_to_define_magic_variable_$1在剧本里我该怎么称呼它呢?

我试过了eval${...}\$${...}但我还是很困惑。


米脂
浏览 956回答 3
3回答

慕桂英4014372

使用关联数组,命令名作为键。# Requires bash 4, thoughdeclare -A magic_variable=()function grep_search() {     magic_variable[$1]=$( ls | tail -1 )     echo ${magic_variable[$1]}}如果不能使用关联数组(例如,必须支持bash3)你可以用declare若要创建动态变量名,请执行以下操作:declare "magic_variable_$1=$(ls | tail -1)"并使用间接参数展开来访问该值。var="magic_variable_$1"echo "${!var}"见BashFAQ:间接评价间接/参考变量.

RISEBY

我最近一直在寻找更好的方法。联想数组听起来对我来说太过分了。看看我发现了什么suffix=bzz declare prefix_$suffix=mystr.然后.varname=prefix_$suffix echo ${!varname}

墨色风雨

下面的示例返回$name_of_var的值var=name_of_var echo $(eval echo "\$$var")
打开App,查看更多内容
随时随地看视频慕课网APP