-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
来完成这个循环,但是没有发生,而是它也被打印出来了。
任何人都可以帮助我理解为什么会有这些差异吗?
答案 0 :(得分:1)
-p
会:
- Read a line from input
- Pass the input to the code
- If the code executes successfully, print the input
如果您没有在命令行中提供文件名或-e
,它将只使用标准输入而不执行任何操作。 -p
无法打印,因为未提供任何代码。
当您刚放-pe '"hi"'
时,每次输入一行(但它在内存中但没有输出)时它会生成一个hi
字符串,并打印为-p
指示。
EOF
不是EOF指标。它是一个字符串"EOF"
。如果要向红宝石发送EOF信号,请按Ctrl+Z
并按Enter
答案 1 :(得分:0)
您首先尝试失败,因为如果没有程序,解释器将读取标准输入直到EOF。所以,你处于令人困惑的情况 first 需要从标准输入输入一个程序,然后是^ D或你控制台上的任何EOF,然后然后你的程序启动,它将再次读取标准输入 以实现固定循环。
在第二种情况下,您至少要避免使用双标准输入snarf。而且它并不是一个无限循环,当你输入EOF时它会完成。