Ruby CLI选项“-p "中使用管道和不使用管道时的行为差异

t1rydlwq  于 11个月前  发布在  Ruby
关注(0)|答案(1)|浏览(107)

我观察到Ruby命令行选项-p的不同行为,这取决于它是否与管道一起使用。下面是两个场景:
无管道:

  • 当我运行ruby -pe 'puts "You said #{$_}"时,它似乎只是在puts打印后输出输入**。

关于Pipe:

  • 但是,使用echo "hello world" | ruby -pe '$_.upcase!中的管道会导致预期的转换,打印出一个upcased“HELLO WORLD”。

有人能解释一下为什么这两种情况下的行为会有差异吗?-p选项在每种情况下与输入的交互方式都不同吗?
FYI。结果如下。

$ echo "hello world" | ruby -pe '$_.upcase!'
HELLO WORLD

个字符

gcxthw6b

gcxthw6b1#

根据ruby(1)手册页,-p标志将“在循环的每一端打印变量$_的值"。在您使用管道的示例中,这正如您所期望的那样工作:使用upcase!将替换$_的值,然后Ruby将其打印出来。
然而,在没有管道的示例中,您使用puts显式打印出一个字符串,这是-p行为的 * 补充 *。使用第一个有管道和没有管道的示例的工作方式相同:

$ ruby -pe '$_.upcase!'
aa
AA
$ echo "aa" | ruby -pe '$_.upcase!'
AA

字符串
您也可以使用-n标志,它的作用与-p相同,但不会自动打印任何内容。例如:

$ ruby -ne 'puts "You said #{$_}"'
aa
You said aa
bb
You said bb
cc
You said cc

相关问题