我需要在shell脚本中读取变量并使用该变量执行某些操作。对于例如我正在从config读取变量市场并使用此变量来查找另一个变量redis_host_silver_$j
命令: -
for j in `echo $markets | awk -F"," '{ for(i=1; i<=NF; ++i) print $i }'`;
do
echo $(redis_host_silver_$j);
done
有人可以帮助我吗?
答案 0 :(得分:1)
错误发生在echo $(redis_host_silver_$j);
部分。
bash中的$()
语法扩展了内部命令,因此您实际上是在尝试执行redis_host_silver_$j
尝试:
for j in `echo $markets | awk -F"," '{ for(i=1; i<=NF; ++i) print $i }'`;
do
echo "redis_host_silver_$j";
done
如果redis_host_silver_...
是您想要其值的变量名称,则执行以下操作:
for j in `echo $markets | awk -F"," '{ for(i=1; i<=NF; ++i) print $i }'`;
do
VAR=redis_host_silver_$j; echo ${!VAR};
done
注意大括号
答案 1 :(得分:0)
我个人会避免使用for循环直接从进程替换中读取数据,进程替换中可能有也可能没有空格。 虽然间接调用可能有效,但我会说你的变量类型是错误的,第二个变量redis_host_silver实际上应该是一个数组,文件中的项目作为索引。
所以可能是这样的:
IFS="," read -ra items <<<"$markets"
for item in "${items[@]}"
do
echo "${redis_host_silver[$item]}"
done
如果“市场”中的值是数字,则调用数组中的“item”变量不需要“$”