在管道之后,该命令被视为以空格为前缀

use*_*544 11 bash ubuntu grep pipe

当我键入时,有时在我的终端(Ubuntu)上:

ls | grep toto
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

 grep: command not found*
Run Code Online (Sandbox Code Playgroud)

请注意,shell正在编写以空格为前缀的grep.这怎么可能?

Gil*_*il' 25

<检查原始问题的来源 >

<pre style="width:650px; white-space:pre-wrap">Sometimes on my terminal (Ubuntu) when I type :

ls |&#160;grep toto
Run Code Online (Sandbox Code Playgroud)

感谢您复制粘贴实际行!(但你没有复制粘贴错误信息,顽皮的你!)看到问题?管道符号后面有一个牢不可破的空间.炮弹只能理解ASCII字符; 所有非ASCII字符(包括U + 00A0 NO-BREAK SPACE)都被视为单词构成,因此牢不可破的空格将被视为命令名称位置中单词的一部分.

您可能使用键盘布局,您需要按住AltGr键入|.确保释放AltGr修改器,以免意外键入AltGr+ Space而不是Space.请注意,您不需要空格,ls |grep toto如果您的手指更容易,则可以输入.


And*_*ras 5

要完成Gilles的答案,您可以在Ubuntu/Gnome中通过键盘布局设置中的常用空格替换不可破坏的空格字符来禁用此行为.

设置 - >键盘 - >布局 - >选项,然后选择"使用空格键输入不可破坏的空格字符"并将其设置为:"任意级别的常用空间".

或者从命令行

setxkbmap -option "nbsp:none"
Run Code Online (Sandbox Code Playgroud)

我在http://my.opera.com/nicomen/blog/unrecognized-character-xc2中找到了此修复程序.

当使用大括号时,这在Perl脚本的法语键盘上也很烦人,或者在使用散列符号进行注释后跟空格时,在Python中也很烦人.