diff --git a/src/Symfony/Component/Process/Process.php b/src/Symfony/Component/Process/Process.php index b71d4dadb5f3f..d1775b797f2b8 100644 --- a/src/Symfony/Component/Process/Process.php +++ b/src/Symfony/Component/Process/Process.php @@ -1643,12 +1643,12 @@ private function escapeArgument(?string $argument): string private function replacePlaceholders(string $commandline, array $env) { - return preg_replace_callback('/"\$([_a-zA-Z]++[_a-zA-Z0-9]*+)"/', function ($matches) use ($commandline, $env) { + return preg_replace_callback('/"\$\{:([_a-zA-Z]++[_a-zA-Z0-9]*+)\}"/', function ($matches) use ($commandline, $env) { if (!isset($env[$matches[1]]) || false === $env[$matches[1]]) { - throw new InvalidArgumentException(sprintf('Command line is missing a value for key %s: %s.', $matches[0], $commandline)); + throw new InvalidArgumentException(sprintf('Command line is missing a value for parameter "%s": %s.', $matches[1], $commandline)); } - return '\\' === \DIRECTORY_SEPARATOR ? $this->escapeArgument($env[$matches[1]]) : $matches[0]; + return $this->escapeArgument($env[$matches[1]]); }, $commandline); } diff --git a/src/Symfony/Component/Process/Tests/ProcessTest.php b/src/Symfony/Component/Process/Tests/ProcessTest.php index b29e1ec1e9a69..b2138d6864ce4 100644 --- a/src/Symfony/Component/Process/Tests/ProcessTest.php +++ b/src/Symfony/Component/Process/Tests/ProcessTest.php @@ -1463,7 +1463,7 @@ public function provideEscapeArgument() public function testPreparedCommand() { - $p = Process::fromShellCommandline('echo "$abc"DEF'); + $p = Process::fromShellCommandline('echo "${:abc}"DEF'); $p->run(null, ['abc' => 'ABC']); $this->assertSame('ABCDEF', rtrim($p->getOutput())); @@ -1471,7 +1471,7 @@ public function testPreparedCommand() public function testPreparedCommandMulti() { - $p = Process::fromShellCommandline('echo "$abc""$def"'); + $p = Process::fromShellCommandline('echo "${:abc}""${:def}"'); $p->run(null, ['abc' => 'ABC', 'def' => 'DEF']); $this->assertSame('ABCDEF', rtrim($p->getOutput())); @@ -1479,7 +1479,7 @@ public function testPreparedCommandMulti() public function testPreparedCommandWithQuoteInIt() { - $p = Process::fromShellCommandline('php -r "$code" "$def"'); + $p = Process::fromShellCommandline('php -r "${:code}" "${:def}"'); $p->run(null, ['code' => 'echo $argv[1];', 'def' => '"DEF"']); $this->assertSame('"DEF"', rtrim($p->getOutput())); @@ -1488,16 +1488,16 @@ public function testPreparedCommandWithQuoteInIt() public function testPreparedCommandWithMissingValue() { $this->expectException('Symfony\Component\Process\Exception\InvalidArgumentException'); - $this->expectExceptionMessage('Command line is missing a value for key "$abc": echo "$abc".'); - $p = Process::fromShellCommandline('echo "$abc"'); + $this->expectExceptionMessage('Command line is missing a value for parameter "abc": echo "${:abc}".'); + $p = Process::fromShellCommandline('echo "${:abc}"'); $p->run(null, ['bcd' => 'BCD']); } public function testPreparedCommandWithNoValues() { $this->expectException('Symfony\Component\Process\Exception\InvalidArgumentException'); - $this->expectExceptionMessage('Command line is missing a value for key "$abc": echo "$abc".'); - $p = Process::fromShellCommandline('echo "$abc"'); + $this->expectExceptionMessage('Command line is missing a value for parameter "abc": echo "${:abc}".'); + $p = Process::fromShellCommandline('echo "${:abc}"'); $p->run(null, []); }