2010-12-07 64 views
1

我是一名带shell脚本的新手,今天我学到了很多东西。 这是此问题的扩展Assigning values printed by PHP CLI to shell variables在shell脚本中操作数组(由php-cli打印)

我得到了解决方案来读取我的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 

回答

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 

至于外壳脚本,我建议使用简单易懂的壳结构,然后进入高级(如${#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 
+0

感谢和+1建议首先使用简单和可理解的shell构造,然后到达advan ced的人 – 2010-12-08 07:31:30

0

你不说你正在使用,但假设它是一个支持数组什么壳:这是一个索引数组,而不是关联数组。虽然在Bash 4中支持关联数组,但如果要使用它们,则需要使用与Martin Kosek的分配答案类似的循环。

+0

我正在使用linux bash shell – 2010-12-08 07:32:48

2

随着bash4,您可以使用映射文件来填充数组和工艺替代喂它:

mapfile -t array < <(your_command) 

然后你可以通过阵列:

for line in "${array[@]}" 

或者使用索引:

for i in "${#array[@]}" 
do 
    : use "${array[i]}" 
done