一尘不染

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

linux

我正在尝试在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名称?


阅读 1197

收藏
2020-06-02

共1个答案

一尘不染

您需要利用变量间接:

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,而不是参数本身的值。这称为间接扩展。”

2020-06-02