gpt4 book ai didi

php - 如何将 PHP 数组传递给 BASH 脚本?

转载 作者:IT王子 更新时间:2023-10-29 00:00:31 25 4
gpt4 key购买 nike

我有一个 php 脚本和一个 bash 脚本。他们在同一个目录中。我正在从命令行运行 php 脚本,它将一个数组传递给 bash 脚本。我正在尝试执行以下操作:

  1. 将 PHP 数组传递给 BASH 脚本
  2. 从 STDIN 获取用户输入
  3. 将用户输入传回 PHP 脚本进行进一步处理

这是我的 php 脚本:

<?php
$a=array("red","green","blue","yellow");

$string = '(' . implode(' ', $a) . ')'; // (red green blue yellow)

$user_response = shell_exec('./response.sh $string');

// do something with $user_response

?>

BASH 脚本应该从 STDIN 读取数组并提示用户选择一个选项:

#!/bin/bash
options=$($1); # (red green blue yellow) but this isn't working
i=0;
echo "select an option";
for each in "${options[@]}"
do
echo "[$i] $each"
i=$((i+1))
done

echo;

read input;
echo "You picked option ${options[$input]}";
# here's where I want to pass or export the input back to the
# php script for further processing

当我运行 php 脚本时,它不显示数组选项。

最佳答案

我想说最简单的方法是不要尝试模拟内部 bash 数组,而是使用“正常”逻辑/后处理。例如;如果您只是将 implode(' ', $a) 传递给 bash 脚本(您还应该通过 escapeshellarg() 传递它):

$a=array("red","green","blue","yellow");
$args = implode(' ', array_map('escapeshellarg', $a));
$user_response = shell_exec('./response.sh '. $args);

然后你可以使用 bash 遍历参数

for each in $*; do
echo $each
done

关于php - 如何将 PHP 数组传递给 BASH 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32721216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com