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