PHP CLI - разделенные запятыми пары ключ / значение, заключенные в фигурные скобки - что это? - PullRequest
0 голосов
/ 09 июля 2019

Запуск PHP-скрипта из cli as:

$ 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. Существует ли онлайн-документация, описывающая это поведение? (да, я уже гуглил - безуспешно)

Спасибо!

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Per секция 3.5.1 Баш ручной :

Расширение скобок - это механизм, с помощью которого можно генерировать произвольные строки. Этот механизм похож на расширение имени файла , но генерируемые имена файлов не должны существовать. Шаблоны, которые должны быть расширены фигурными скобками, принимают форму необязательной преамбулы , за которой следует либо последовательность строк, разделенных запятыми, либо выражение последовательности между парой скобок, за которым следует необязательный postscript, Преамбула имеет префикс к каждой строке, содержащейся в фигурных скобках, а затем к каждой результирующей строке добавляется постскриптум, расширяющийся слева направо.

В вашем случае нет преамбулы или постскриптума, поэтому он просто распространяется на каждый из элементов в списке.

Вы можете увидеть результат, используя echo:

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

Какие выходы:

a=1 b=2 c=3

Если вы используете преамбулу и 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
0 голосов
/ 09 июля 2019

{} представляется как объект в PHP, когда var_dump экземпляр класса, вы увидите, что он заключен в {}. Я нашел документацию, которая описывает, как использовать $argv https://www.php.net/manual/en/reserved.variables.argv.php

...