【问题标题】:php/bash script adds a parameter to command linephp/bash 脚本向命令行添加参数
【发布时间】:2022-01-19 21:25:53
【问题描述】:
<?php var_dump($argv); ?>

好的 - 直接运行 - 得到预期的结果。

$ php /tmp/check-arg.php -s 测试黄色总线

array(5) {
  [0]=>
  string(18) "/tmp/check-arg.php"
  [1]=>
  string(2) "-s"
  [2]=>
  string(4) "test"
  [3]=>
  string(6) "yellow"
  [4]=>
  string(3) "bus"
}

好的 - 所以我想像运行命令一样运行这个脚本(它是一个替换现有命令的 php 脚本),所以我创建了这个脚本

$ vi /tmp/testingcommand

php /tmp/check-arg.php $1 $2 $3 $4 $5 $6 $7 $8 $9 $10

(edit - change the $10 to {10} is solution - or use "$@" instead of $1 $2...)

所以我应该可以

$ /tmp/testingcommand -s 测试黄色总线

array(6) {
  [0]=>
  string(18) "/tmp/check-arg.php"
  [1]=>
  string(2) "-s"
  [2]=>
  string(4) "test"
  [3]=>
  string(6) "yellow"
  [4]=>
  string(3) "bus"
  [5]=>
  string(3) "-s0"
}  

好的——那么“-s0”是从哪里来的?我做了一些摆弄,这就是 $argv[1] (-s) 和“0”中的内容(所以在本例中为 -s0)

有什么想法吗?发生在我们的 RHEL7 和 Fedora 30 设置上

由于脚本可以直接运行(php program.php)或通过脚本运行,我不能只忽略 argv[] 的最后一个索引 我想我可以检查 argv[0] 的 '...php' 并保留所有索引,如果没有 ...php 则忽略最后一个索引

【问题讨论】:

  • $10$1 后跟 0 的扩展。
  • php /tmp/check-arg.php "$@" 顺便说一句。
  • 好的 - 现在很有意义!

标签: php linux bash


【解决方案1】:

-s0 来自 $10。那是$1,后跟0

使用${10} 访问参数10。只要参数编号超过一位,就需要大括号。

请注意,如果任何参数有空格,您的代码将无法正常工作,因为您没有引用变量。变量值会进行分词和通配符扩展。

但是,如果您引用所有变量,您将获得未提供的参数的显式 '' 值,这也可能是不希望的。

引用所有参数的正确方法是使用"$@"

php /tmp/check-arg.php "$@"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2011-10-16
    • 2020-10-09
    • 2014-03-14
    • 2012-11-27
    • 1970-01-01
    • 2019-02-22
    相关资源
    最近更新 更多