我需要创建许多以“precip”开头的变量,后面跟着一个动态字符串,这是一个读入变量。我读入这个变量,假设它是“1971”,然后我多次将其增加 5,以创建五个左右的变量,范围从 1971、1976、1981 等。我需要将这些变量中的每一个(名为 yr1、yr2、yr3...)附加到“precip”变量。
举个例子,而不是下面的硬编码变量:
precip1971="pr_"$reg"_"$glob"_1971010103.nc"
precip1976="pr_"$reg"_"$glob"_1976010103.nc"
precip1981="pr_"$reg"_"$glob"_1981010103.nc"
precip1986="pr_"$reg"_"$glob"_1986010103.nc"
precip1991="pr_"$reg"_"$glob"_1991010103.nc"
precip1996="pr_"$reg"_"$glob"_1996010103.nc"
我想要类似的东西(知道下面这是错误的):
precip+yr1="pr_"$reg"_"$glob"_1971010103.nc"
precip+yr2="pr_"$reg"_"$glob"_1976010103.nc"
precip+yr3="pr_"$reg"_"$glob"_1981010103.nc"
precip+yr4="pr_"$reg"_"$glob"_1986010103.nc"
precip+yr5="pr_"$reg"_"$glob"_1991010103.nc"
precip+yr6="pr_"$reg"_"$glob"_1996010103.nc"
因此 precip+yr1 等于名为 precip1971 的变量,precip+yr2 等于名为 precip1976 的变量,依此类推。
我已经找到了连接两个变量值的方法,但没有找到将新变量与现有变量的值连接起来的方法。
有没有办法在 Bash 中做到这一点?
谢谢。
答案1
您可以使用eval
来评估变量赋值。以下是与您的场景相关的示例程序。
#!/bin/bash
year=1971
for ((i=0; i<=10; i++))
do
eval precip${year}="pr_${reg}_${glob}_1971010103.nc"
((year+=5))
done
此处,该eval
语句对变量进行求值precip${year}
,precip1971
等等。