微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐