我对Linux中的脚本相对较新(更习惯使用R)但是我正在尝试执行一个脚本,我将一些变量设置为文件路径然后我可以在for循环中调用所以我可以同时调用它们整个脚本中的变量名和变量值。
例如,我将为命令的参数调用变量值(如在文件路径中),但是对于命令的输出,我将调用变量名来写输出。我试图使用下面的花括号来实现这一点。这会有效吗?
非常感谢任何帮助!
#Generate variables with path directories
C1=/path/file1
C2=/path/file2
C3=/path/file3
C4=/path/file4
L1=/path/file1
L2=/path/file2
L3=/path/file3
#Loop through each instance of C for each instance of L (to create L*C number of outputs)
for Cid in C1, C2, C3, C4,
do for Lid in L1, L2, L3,
do
commandA -arg1 $${Cid} -arg2 $${Lid} -output /path/file${Cid}${Lid}
done
done
答案 0 :(得分:1)
这是使用declare -A
声明的关联数组的作业:
#!/usr/bin/env bash
declare -A arr=(
[C1]=/path/file1
[C2]=/path/file2
[L1]=/path/file1
[L2]=/path/file2
)
for index in "${!arr[@]}"; do
echo "$index:${arr[$index]}"
done
${!arr[@]}
:数组的所有索引(C1
,C2
,...)${arr[$index]}
:与给定索引(/path/file1
,...)如果您想坚持使用常规变量,可以使用variable indirection:
C1=/path/file1
C2=/path/file2
L1=/path/file1
L2=/path/file2
for var in C1 C2 L1 L2; do
echo "$var:${!var}"
done
${!parameter}
如果
parameter
的第一个字符是惊叹号(!
),和parameter
不是nameref,它引入了一个变量级别 间接。 Bash使用从其余部分形成的变量的值parameter
作为变量的名称;那么这个变量就是 扩展,该值用于替换的其余部分, 而不是parameter
本身的价值。