【问题标题】:Passing array argument to bash from php从php将数组参数传递给bash
【发布时间】:2015-10-05 12:34:18
【问题描述】:

我正在尝试从 shell_exec 传递数组并希望访问 bash 文件中的数组。我试图从许多网站进行研究,但没有找到合适的解决方案。请帮我解决这个问题。提前致谢

PHP 代码

$array= $countries_array; // Countries array from database
shell_exec('sh get_countries.sh '.$array);

Bash 文件 countries.sh

回声 $1;

我对 bash 文件中的数组有所了解:

#!/bin/bash
declare -a myArray
myArray=("$@") 
for arg in "${myArray[@]}"; do
 echo "$arg"
done

但我很困惑,如何在 bash 文件中获取 $array?

对于传递变量,使用以下代码:

$var=shell_exec('sh get_countries.sh hello');
echo $var;

Bash 文件==>

 echo $1

输出将是 hello

echo 'sh countries.sh '.join(' ',$data);

输出==>

SH countries.sh a940cfb9-2abe-5835-9d69-41c0d992c38d 768bd771-359f-5da0-9f66-ccae4460f98d 778f384c-8496-56f1-96e6-4a03b2c22ff5 45ba4726-bba8-5e7b-ab62-c0e30df2e81b c8eb2a47-dc44-5439-80db -b6c7b7c1d30c c875edce-2177-55c9-BFA0-c4af3b9ac281 21c6ea3f-b6f3-5fa6-b693-863dddbe22d3 944d2f91-e4a3-53e3-9379-0a4cb6819dd5 a3db4ca5-7442-529d-bbf2-aa0dc74dd3e3 c0698faa-8a83-5aea-8f41-e8d993ff7fb4 4d0ab432-6e40 -5e5d-8304-9b2108cf6a0f 54522d73-15bd-5061-aaf3-beb7cc6a0ed2 4d4a7d51-7af4-538d-a09e-92335eecb7b4 be9406d5-26af-52d7-a141-1f8d299beb9b 89bb6275-5047-5f0f-a369-8e0c9028654c 24151e55-c1ba-5ca3-8728- 2558faf308ea 13895b30-322f-5886-8eba-7272fb4f990f a31d7cc7-49ea-5746-be3e-b15fe3894d43 e5505a29-37c5-582a-872A-6a65d74c8ded 92c4a93d-c91c-55eb-8f9f-fcb675d27cee 20c7086e-1599-52e6-8d8e-287b9e0cb58b 48a2bc90-14e0- 575D-a0de-31140eb885ac 2d3772ca-9a65-5707-AD22-f53076acc3c3 731863e8-6889-5691-ad6e-4fd34c747889 762244b1-f952-5a34-8f71-eb2d856be293 ddb0eb7e-4ee5-56b7-a65a-d8dcf8238618 ff861dba-13f3-5282- afc2-9b9d7de3c18a eeb07bf4-a752-5289-ae47-3d549c54a552 c40bb588-4db7-5602-A12C-2697a9bf671a b89c6a26-87e0-5deb-ba28-f9cc39d7aeeb 11989abf-c6c0-5593-8451-e199e1a54c16 c9b19a1f-005C-5d0e-b7e1-5f52697cf4cf cfa46bd6- ac53-5d61-be9d-ec0d949138dc fe584292-01ab-5041-8c34-c824b8e4c5a7 2230ef16-921c-5fe1-ba69-79cf7c5ecff3 a1834c7f-bb69-59a4-b596-633590314bf6 7a41586b-927A-5100-9b9e-bff61e47440e e9a04859-a739-5b19 - 贝达-b1d715f0b5da 2ba8a83a-92d0-5e18-81fa-1c09bcb4f1e2 4530e663-b036-5f33-8ad5-78dbf672f1cc 67ce40ed-f6c5-52a0-8eed-0b1c351765cb e6081884-fc3e-5cd5-8fdf-b4256aef251c 21668da0-A24E-5f74-ae14-32111c3ee78b 1a7f1847-87ad -5255-8011-177535b5979d e8d56819-7de5-567c-8672-55ea33c90676 cdc1c35a-2455-57e4-a8e5-4e01fd4f2d07 3f137a13-7011-5306-95e0-d713df89f9e6 e2153d20-e940-5c15-892c-a26e41afb9ca eb0e5967-3e1d-5eef-a453- 0c74eb9af66a 0de046fc-40a6-599a-884f-18efb8281dc8 769bba0e-4b25-55e9-95c2-7e32096a05e7 e3cc0250-61bb-55c5-b3d4-90f3fb8a3290 8a9beccd-86d9-5150-b4ab-624e007c3594 91c72559-f535-5067-9 989-9e0095f97ce3 41147580-3444-5ace-9e67-1f0f060474fd b1cda433-3059-5240-b59b-91694336fc35 7d042de8-ed7a-5faf-9a16-2ae409e5a2f8 f116b2b7-490d-5451-abc3-1141868da92e 1f19bb92-23fc-5f2e-ac5e-bbc3f9965aeb

【问题讨论】:

    标签: php bash shell


    【解决方案1】:

    如果你的 php 变量 $array 是一个 php 数组,你需要将它转换成一个字符串来进行调用,例如:

     shell_exec('sh get_countries.sh '.join(' ',$array));
    

    那么您的countries.sh 应该正是您提供的示例:

    #!/bin/bash
    declare -a myArray
    myArray=("$@") 
    for arg in "${myArray[@]}"; do
     echo "$arg"
    done
    

    确保您允许使用chmod a+rx countries.sh 执行该文件。

    【讨论】:

    • 能否请您告诉我如何在 shell 中访问它,它现在正在工作,但我不知道如何在 shell 中访问它。 echo $1 正在工作,使用 this=> shell_exec('sh get_countries.sh '.join(',',$array));你能帮我更新一下代码吗?
    • shell 用空格分隔它的参数,而不是逗号,。你为什么不想像我一样使用带有空格字符的join
    • 我现在已经用空格分隔了,但是我应该如何知道在 bash 中要使用多少索引变量。现在 $1 有一个值,$2 有另一个值。它工作得很好。但是我应该如何在 bash 中将这些数据绑定到数组中?
    • 命令myArray=("$@") 会将$1 等复制到变量myArray 中。那么$1${myArray[1]} 相同。 $# 是给你的 shell 命令的参数数量。
    • 代码现在完美运行,问题出在权限上。谢谢
    猜你喜欢
    • 2019-05-30
    • 1970-01-01
    • 2021-10-05
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多