PHP CLI-用大括号括起来的逗号分隔键/值对-它们是什么?

时间:2019-07-09 14:21:23

标签: bash brace-expansion

从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. 是否存在描述此行为的在线文档? (是的,我已经在Google上搜索过-没有成功)

谢谢!

2 个答案:

答案 0 :(得分:1)

section 3.5.1the Bash manual

  

括号扩展是一种机制,通过该机制可以生成任意字符串。此机制类似于文件名扩展,但是生成的文件名不必存在。大括号扩展的模式采用可选的 preamble 的形式,然后是一系列用逗号分隔的字符串或一对大括号之间的序列表达式,然后是可选的 postscript 。前缀在括号中的每个字符串之前都有前缀,然后将后记附加到每个结果字符串之后,从左向右扩展。

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

您可以使用echo查看结果:

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

哪个输出:

a=1 b=2 c=3

如果要使用 preamble postscript

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

答案 1 :(得分:-1)

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