我观察到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
个字符
1条答案
按热度按时间gcxthw6b1#
根据
ruby(1)
手册页,-p
标志将“在循环的每一端打印变量$_
的值"。在您使用管道的示例中,这正如您所期望的那样工作:使用upcase!
将替换$_
的值,然后Ruby将其打印出来。然而,在没有管道的示例中,您使用
puts
显式打印出一个字符串,这是-p
行为的 * 补充 *。使用第一个有管道和没有管道的示例的工作方式相同:字符串
您也可以使用
-n
标志,它的作用与-p
相同,但不会自动打印任何内容。例如:型