来自bash管道和herdoc的php stdin

来自bash管道和herdoc的php stdin,bash,php,Bash,Php,我可以从管道和herdoc接收输入,并在命令行上从php内部使用它们吗 我想这样做: bash$ ls -l | php <<'code' <?php echo $piped; ?> code bash$ls-l | php管道 ls-l | php-r'打印(文件php://stdin"));' herdeoc $ php <<CODE <?php echo "Hello World\n"; ?> CODE Hello World $

我可以从管道和herdoc接收输入,并在命令行上从php内部使用它们吗

我想这样做:

bash$ ls -l | php <<'code'
<?php
   echo $piped;
?>
code

bash$ls-l | php管道

ls-l | php-r'打印(文件php://stdin"));'


herdeoc

$ php <<CODE
<?php
echo "Hello World\n";
?>
CODE
Hello World
$php
程序完成
代码
[0]=>
[6] =>程序已完成
程序完成

注意:当您使用Here Documents for
php
命令时,新添加的
php
代码将覆盖先前的
stdin

关于问题的
-R
部分:

-R
/
--过程代码

为每个输入行执行的PHP代码。在PHP5中添加

此模式中有两个特殊变量可用:
$argn
$argi
$argn
将包含PHP此时正在处理的行,而
$argi
将包含行号

如果我正确理解了您的问题,那么您正在查找
$argn
变量。您的bash应该支持herdoc

编辑:错误,只需在多行上使用值调用即可:

$ ls -l | php -R '
printf("#%02d: %s\n", $argi, $argn);
'

(我认为使用单引号切换更容易)

@DaveRandom在bash中,这里String需要三个
@Shiplu我收回我的学究作风并承认失败(因为我以前在bash的上下文中从未遇到过这一点)。评论将被删除…@DaveRandom:Pedanticism要求你停止在不适当的地方写撇号。@TomalakGeret'kal我甚至不打算开始讨论所有格撇号的确切语义用法,这是一场永远不会结束的辩论。你可能会喜欢…@DaveRandom:你应该遵循这个建议。。。我不知道什么时候应该使用撇号;只有很多人弄错了。另外,请不要滥用逗号。因此,您的意思是,当您将管道和heredoc组合在一起时,管道部分会被heredoc部分踩踏,并且无法检索?@Billymon yes。它无法检索。我不知道如何将herdoc传递给
php-R
,而不是一个字符串,我也不确定是否可以直接传递。我的缺点是,尝试多行“字符串”而不是herdoc。编辑了这个问题来反映这一点。哇,多行字符串-多大的启示啊。简单,优雅-我不知道。。。最近我花了太多时间写javascript!我发现,如果我使用
来定义多行字符串,我不必转义太多的php代码,但是有什么方法可以避免转义php代码中的
——因此可能使用不同的标记来分隔多行字符串?@Billymon:最好在php代码中使用单引号作为参数。你不需要逃避那么多。
$ ls -l | php -R '
printf("#%02d: %s\n", $argi, $argn);
'