1

-p==> 假设循环像 -n 但打印行也像 sed。

现在我尝试在下面看看它是如何工作的:

@ubuntu:~$ ruby -p
hi #<~~ pressed on ENTER
   # nothing printed baack 
\t
-:5: syntax error, unexpected $undefined, expecting $end
@ubuntu:~$

在上面输入“hi”后,当我按“ENTER”时,上面有空行。我认为它会输出为hi

现在我尝试了一些不同的方式:

@ubuntu:~$ ruby -p -e '"hi"'
hi  #<~~ pressed on ENTER
hi
ttt #<~~ pressed on ENTER
ttt
\t  #<~~ pressed on ENTER
\t
EOF #<~~ pressed on ENTER
EOF

但在这里它似乎-p按预期工作。而是Loop陷入了无限Loop。我试图EOF完成这个循环,但没有发生,而是它也被打印出来了。

谁能帮我理解为什么会有这些差异?

4

2 回答 2

1

-p会做:

- Read a line from input
- Pass the input to the code
- If the code executes successfully, print the input

如果您不提供文件名或-e命令行,它只会使用标准输入而不执行任何操作。-p不打印,因为没有提供代码。

当你刚刚 put时,它会在你每次输入一行时-pe '"hi"'生成一个字符串(但它在内存中但没有输出)并按指示打印。hi-p

EOF你放的不是EOF指标。它是一个字符串"EOF"。如果要向 ruby​​ 发送 EOF 信号,请按Ctrl+ZEnter

于 2013-02-13T20:35:06.453 回答
0

您的第一个实验失败了,因为没有程序,解释器将读取标准输入,直到 EOF。因此,您处于令人困惑的情况,首先需要从标准输入输入程序,然后是 ^D 或控制台上的任何 EOF,然后您的程序将启动并再次读取标准输入以实现固定循环。

在第二种情况下,您至少可以避免双重标准输入陷阱。而且它并不完全是一个无限循环,当您键入 EOF 时,它将完成。

于 2013-02-13T19:53:16.410 回答