首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash -如何在变量名中使用变量

Bash -如何在变量名中使用变量
EN

Unix & Linux用户
提问于 2018-08-22 19:35:32
回答 3查看 244关注 0票数 1

是的,是的,我知道你可能会说“嘿,还有成百上千的人在问同样的问题”,但那不是真的,我不想做这样的事情:

代码语言:javascript
复制
foo="example1"
bar="example2"
foobar="$foo$bar"

我想这么做:

代码语言:javascript
复制
foo="example1"
$foo="examle2"

但是,每当我尝试这样做时,我都会收到一条错误消息,上面写着:

代码语言:javascript
复制
bash: example1=example2: command not found

有什么建议吗?这有可能吗?

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2018-08-22 20:07:51

下面是一些示例:

代码语言:javascript
复制
declare [-g] "${foo}=example2"
代码语言:javascript
复制
declare -n foo='example1'
foo='example2'
代码语言:javascript
复制
eval "${foo}=example2"
代码语言:javascript
复制
mapfile -t "${foo}" <<< 'example2'
代码语言:javascript
复制
printf -v "${foo}" '%s' 'example2'
代码语言:javascript
复制
IFS='' read -r "${foo}" <<< 'example2'
代码语言:javascript
复制
typeset [-g] "${foo}=example2"

正如其他用户所说,对eval和一般的间接分配要小心。

票数 6
EN

Unix & Linux用户

发布于 2018-08-22 19:39:09

使用eval是可能的。

代码语言:javascript
复制
eval $foo="examle2"

请注意,您应该非常确信$foo的值是可信的。

另一种更好的选择是使用索引数组,在这种情况下,您不会冒险执行任意命令。

票数 0
EN

Unix & Linux用户

发布于 2018-08-22 19:40:41

代码语言:javascript
复制
suffix=bzz
declare -g prefix_$suffix=mystr

然后...and ..。

代码语言:javascript
复制
varname=prefix_$suffix
echo ${!varname}

无耻地从这里偷来的。

编辑:正如Stephane所说,这通常是个坏主意,应该避免。索引数组是更好的选择。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/464225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档