首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在bash中导出变量,其中变量名由两个变量组成?

如何在bash中导出变量,其中变量名由两个变量组成?
EN

Unix & Linux用户
提问于 2019-01-24 15:45:33
回答 2查看 6.1K关注 0票数 3

我试图在for循环中导出变量,在该循环中,我希望循环的每一次迭代都更改写入变量的内容。在bash中,我一直在寻找合适的语法来满足像这样的导出,但我都没有尝试过。做这件事的正确方法是什么?

为了增加更多的细节,我希望当循环运行时,我将导出第一次运行的FVAR0、第二次运行的FVAR1、第三次运行的FVAR2等等。

最初我试过export FVAR$i

export "${!FVAR[$i]}"是我最近的猜测。

代码语言:javascript
运行
复制
#!/bin/bash
set -x
for i in 0 1 2 3 4
do
    export "${!FVAR[$i]}"=$(ls ./run/$i)
done


10:36:10 Thu Jan 24 ::  ./uploader.sh
+ for i in 0 1 2 3 4
++ ls ./run/0
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/1
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/2
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/3
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/4
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-01-24 18:22:26

这样做是可行的:

代码语言:javascript
运行
复制
#!/bin/bash

for x in 0 1 2 3; do
    export FVAR$x="Is's $x"
done

env | grep FVAR

执行:

代码语言:javascript
运行
复制
$ ./fvar.sh 
FVAR3=Is's 3
FVAR2=Is's 2
FVAR1=Is's 1
FVAR0=Is's 0
票数 1
EN

Unix & Linux用户

发布于 2019-01-24 19:18:59

代码语言:javascript
运行
复制
export "${!FVAR[$i]}"=...

这将假设FVAR是一个数组,并尝试在索引$i中使用它的元素作为变量的名称,以便在该命令行上展开。(也就是说,a=11; b=22; c=33; p=(a b c); echo ${!p[1]}将打印22,因为p[1]b$b22。)

FVAR[0]等在脚本中不保存变量的名称,因此展开会导致一个空字符串。

你应该能用

代码语言:javascript
运行
复制
for i in 1 2 3 4 5; do
    export "FVAR$i=$(generate some value from $i)"
done

export在展开后处理变量名时。然而,定期派任的情况并非如此。FVAR$i=$(...)不工作。

当然,取决于您在做什么,可能还有其他方法,比如将所有的值放在一个变量中,然后导出它。

代码语言:javascript
运行
复制
FVARS="$(generate some value from 1)"
for i in 2 3 4 5 ; do
    FVARS+=":$(generate some value from $i)"
done
export FVARS

虽然这需要保留一些字符作为分隔符,并安排将分隔符放置在正确的位置等。

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

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

复制
相关文章

相似问题

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