0

从 cli 运行 PHP 脚本为:

$ php test.php {a=1,b=2,c=3}

结果$argv结构为:

[
    0 => test.php
    1 => a=1
    2 => b=2
    3 => c=3
]

问题。

  1. 在这种情况下的预期含义是{ ... }什么?
  2. 它是 PHP 的事情还是 bash 的事情?
  3. 是否有描述这种行为的在线文档?(是的,我已经用谷歌搜索了 - 没有成功)

谢谢!

4

2 回答 2

1

根据Bash 手册的3.5.1 节

大括号扩展是一种可以生成任意字符串的机制。这种机制类似于文件名扩展,但生成的文件名不需要存在。要进行大括号扩展的模式采用可选preamble的形式,后跟一系列逗号分隔的字符串或一对大括号之间的序列表达式,然后是可选的postscript。序言作为前缀添加到大括号中包含的每个字符串,然后将后记附加到每个结果字符串,从左到右扩展。

在您的情况下,没有序言或后记,因此它只是扩展到列表中的每个元素。

您可以使用以下命令查看结果echo

echo {a=1,b=2,c=3}

哪个输出:

a=1 b=2 c=3

如果您要使用序言后记

echo before{a=1,b=2,c=3}after

你得到:

beforea=1after beforeb=2after beforec=3after

我通常在尝试将文件复制或移动到备份时使用它:

cp somefile.txt{,.bak}

扩展为:

cp somefile.txt somefile.txt.bak
于 2019-07-09T14:35:27.520 回答
-1

{}在 中表示为一个对象PHP,当var_dump一个类的实例时,你会看到它被{}. 我发现有一个文档描述了如何使用$argv https://www.php.net/manual/en/reserved.variables.argv.php

于 2019-07-09T14:38:10.290 回答