我正在尝试将一些php变量的值放入bash脚本中以设置其他bash变量。基本上我需要能够访问变量 - 变量名称的值。
脚本可以找到&读取文件,找到php变量,但是当我尝试设置它们时它只是挂起。这就是我所拥有的:
variables=(database_user database_password dbase);
paths=(modx_core_path modx_connectors_path modx_manager_path modx_base_path);
for index in "${variables[@]}"; do
index=\$$index
echo $index;
$index="$(grep -oE '\$${!index} = .*;' $config | tail -1 | sed 's/$${!index} = //g;s/;//g')";
done
不确定我在这里做错了什么......
答案 0 :(得分:2)
您正在尝试执行间接分配。
你应该摆脱这两行:
index=\$$index
echo $index;
简单地写:
echo "${!index}"
干净地进行间接扩展(给出变量名称包含在变量index
中的变量的值)。
接下来,有问题的一行就是这个:
$index="$(grep -oE '\$${!index} = .*;' ... (rest omitted)
在Bash中,作业不能以$
开头。
您可以执行间接分配的一种方法是(按照上面的建议删除index
重新分配后):
printf -v "$index" "$(grep -oE '\$${!index} = .*;' ... (rest omitted)
这使用-v
的{{1}}选项,这会将作为最终参数传递的值分配给变量,该变量的名称将传递给printf
选项。
还有其他处理间接分配/扩展的方法,其中一些方法具有代码注入风险,因为它们使用(可能不受控制的)数据作为代码。这是您可能希望进一步研究的内容。
请注意我假设实际的-v
命令替换有效(我还没有测试过)。