我正在尝试在 for 循环中导出变量,我希望循环的每次迭代都可以更改要写入的变量。我一直在寻找正确的语法来满足在 bash 中这样的导出,但我尝试过的都没有奏效。这样做的正确方法是什么?
添加更多细节,我希望当循环运行时,我会在第一次运行时导出 FVAR0,在第二次运行时导出 FVAR1,在第三次运行时导出 FVAR2,依此类推。
本来我试过export FVAR$i
export "${!FVAR[$i]}"
是我最近的猜测。
#!/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
这有效:
执行:
这将假设
FVAR
是一个数组,并尝试使用其索引中的元素$i
作为变量的名称以在该命令行上展开。(也就是说,a=11; b=22; c=33; p=(a b c); echo ${!p[1]}
将打印,22
因为p[1]
isb
,$b
is22
。)FVAR[0]
等不要在该脚本中保存变量的名称,因此扩展会导致空字符串。你应该可以使用
as
export
处理扩展后的变量名。但是,常规分配的情况并非如此。FVAR$i=$(...)
不起作用。当然,根据您的操作,可能还有其他方法,例如将所有值放在一个变量中,然后将其导出。
虽然这需要保留一些字符用作分隔符,并安排将分隔符放在正确的位置等......