在unix shell脚本中读取变量并执行操作

时间:2017-02-17 08:21:20

标签: bash shell unix awk

我需要在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

有人可以帮助我吗?

2 个答案:

答案 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”变量不需要“$”