Linux-在Shell脚本中操作数组(由php-cli打印)

我是使用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;

外壳代码

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

解决方法:

您应该首先调试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

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...