在 Bash 中将一个变量连接到另一个变量或字符串的末尾

在 Bash 中将一个变量连接到另一个变量或字符串的末尾

我需要创建许多以“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等等。

相关内容