我试图在shell脚本中生成动态变量名,以在循环中处理一组具有不同名称的文件,如下所示:

#!/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}

有可能在运行中生成变量名吗?

推荐答案

您需要利用变量间接寻址:

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 man page开始,在"参数展开"下:

"如果参数的第一个字符是感叹号(!),A.

Linux相关问答推荐

Linux打开/dev/tran/n是否与复制相同?

AWK打印到文件正在追加,而不是覆盖

在树莓派内核中找不到arch/arm/kernel/calls.S

Boost更新失败,现在不确定我有哪个版本

使用sed命令将记录中的字符串替换为DD-MMM-YYYY日期格式

在 Linux 上的 std::threads 中创建子进程

有没有办法确定什么代码使 linux 共享对象inflating ?

8 个半小时范围的 Crontab 表达式

Google Cloud Ops Agent Mongo 集成错误 - AuthenticationFailed:SCRAM 身份验证失败,storedKey 不匹配

MessageBox 的 GTK 实现

在 Linux 下将 TCP 流量重定向到 UNIX 域套接字

仅当当前行中存在字符串时才替换

如何在 linux ElementaryOS 中修复 Genymotion,但未找到错误CXXABI_1.3.8

用于 Linux 的 Less 编译器

如何在 Bash 中对齐空格分隔表的列?

如何在python中找到文件或目录的所有者

使远程目录保持最新

比较linux中两个未排序的列表,列出第二个文件中的唯一性

Docker Bash 提示不显示 colored颜色 输出

如何将所有文件从一个目录移动(和覆盖)到另一个目录?