我是shell脚本的新手,今天我学到了很多东西。 这是此问题的扩展Assigning values printed by PHP CLI to shell variables
我得到了在shell脚本中读取变量的解决方案。现在如何操纵数组?如果我在我的PHP代码中准备一个数组并打印它,并在我的shell中回显,它会显示Array。如何在shell脚本中访问该数组?我尝试了how to manipulate array in shell script
中给出的解决方案 使用以下代码: -
PHP代码
$neededConstants = array("BASE_PATH","db_host","db_name","db_user","db_pass");
$associativeArray = array();
foreach($neededConstants as $each)
{
$associativeArray[$each] = constant($each);
}
print $associativeArray;
Shell代码
function getConfigVals()
{
php $PWD'/developer.php'
}
cd ..
PROJECT_ROOT=$PWD
cd developer
# func1 parameters: a b
result=$(getConfigVals)
for((cnt=0;cnt<${#result};cnt++))
do
echo ${result[$cnt]}" - "$cnt
done
我得到了这个输出: -
Array - 0
- 1
- 2
- 3
- 4
我希望得到这个: -
Array
BASE_PATH - /path/to/project
db_host - localhost
db_name - database
db_user - root
db_pass - root
答案 0 :(得分:2)
您应首先调试 PHP脚本以生成有效的数组内容,代码
print $associativeArray;
只会得到以下输出:
$ php test.php
Array
您只需在foreach循环中打印关联数组:
foreach ( $associativeArray as $key=>$val ){
echo "$key:$val\n";
}
列出由':'
分隔的变量名称+内容$ php test.php
BASE_PATH:1
db_host:2
db_name:3
db_user:4
db_pass:5
对于 shell脚本,我建议使用简单易懂的shell构造,然后使用高级的(如${#result}
)正确使用它们
我已尝试使用以下bash脚本将变量从PHP脚本输出到shell脚本:
# set the field separator for read comand
IFS=":"
# parse php script output by read command
php $PWD'/test.php' | while read -r key val; do
echo "$key = $val"
done
答案 1 :(得分:2)
使用bash4,您可以使用mapfile填充数组并处理替换以提供它:
mapfile -t array < <( your_command )
然后你可以通过以下方式浏览数组:
for line in "${array[@]}"
或使用指数:
for i in "${#array[@]}"
do
: use "${array[i]}"
done
答案 2 :(得分:0)
你没有说你正在使用什么shell,但假设它是支持数组的那个:
result=($(getConfigVals)) # you need to create an array before you can ...
for((cnt=0;cnt<${#result};cnt++))
do
echo ${result[$cnt]}" - "$cnt # ... access it using a subscript
done
这将是一个索引数组,而不是一个关联数组。虽然在Bash 4中支持关联数组,但是如果要使用它们,则需要使用类似于Martin Kosek的答案中的循环来进行分配。