当前位置:  开发笔记 > 后端 > 正文

为什么问号在Ruby中被解释为"z"

如何解决《为什么问号在Ruby中被解释为"z"》经验,为你挑选了1个好方法。

为什么这一行输出"z"而不是"?"

$ ruby​​ -e'放%x [echo#{"?"}]'

假设#{...}内的表达式是一个可能具有值"?"的变量.我应该如何修改这个脚本,以便输出问号而不是"z"?

(请原谅这个问题的标题 - 我还不清楚这里发生了什么,以提供更具描述性的标题.)



1> rampion..:

它不是红宝石,它是你的外壳.

很多炮弹扩大了?用于匹配命令行参数中的单个字符的字符.它很有用,如果你有一堆文件名tempA,temp1,tempB,...,temp9你要删除,但你不想删除'temple'

% rm temp?

所以我猜你的工作目录中有一个名为'z'的文件或目录,而且?匹配,所以它被shell取代.

通常,当在单引号内(如ruby脚本)时,它不会被扩展,但由于你将问号传递给shell命令,它会在那里扩展.

% ruby -e 'puts %x[ echo ? ]'
z
%

应该告诉你相同的行为.

此外,如果你触摸其他一些像abcd这样的单个字符文件名,那些也应该出现:

% touch a b c
% ruby -e 'puts %x[ echo ? ]'
a b c z
%

如果你想在ruby中调用外部shell命令时避免这种情况,你必须转义你传递的任何字符串.对于大多数用途String#inspect应该给予足够好的逃避.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有