如何在Shell脚本中动态生成新的变量名?

我正在尝试在Shell脚本中生成动态var名称,以在循环中如下处理一组具有不同名称的文件:

#!/bin/bash

SAMPLE1='1-first.with.custom.name'

SAMPLE2='2-second.with.custom.name'

for (( i = 1; i <= 2; i++ ))

do

echo SAMPLE{$i}

done

我期望输出:

1-first.with.custom.name

2-second.with.custom.name

但我得到了:

SAMPLE{1}

SAMPLE{2}

是否可以即时生成var名称?

回答:

您需要利用变量间接:

SAMPLE1='1-first.with.custom.name'

SAMPLE2='2-second.with.custom.name'

for (( i = 1; i <= 2; i++ ))

do

var="SAMPLE$i"

echo ${!var}

done

在Bash手册页的 “参数扩展”下:

“如果参数的第一个字符是感叹号(!),则会引入变量间接级别。Bash使用从参数其余部分形成的变量的值作为变量的名称;然后对该变量进行扩展,然后在替换的其余部分中使用value,而不是参数本身的值。这称为间接扩展。”

以上是 如何在Shell脚本中动态生成新的变量名? 的全部内容, 来源链接: utcz.com/qa/433439.html

回到顶部