web-dev-qa-db-ja.com

パイプ(|)の後にスペースが続く隠し文字

Macで、パイプ(|)文字の後にスペース文字を使用すると、その間に非表示の文字が挿入されることがよくあります。

これは、コマンドを無効にするため、端末を使用するときに特に厄介です。

Iterm2に次のように入力すると、次のようになることがよくあります。

ls | cat
zsh: command not found:  cat

上矢印キーを押して前のコマンドを取得し、|catの間のスペースを削除して再挿入すると、コマンドは機能します。

動作中のコマンドと動作していないコマンドをコピーしてファイルに貼り付けると、次のようになります。

non-working: ls | cat
working: ls | cat

Hex Fiend で開きます。次のように表示されます。

non-working: ls | cat
working: ls | cat

角かっこを使用したSublimeText2でも同じ種類の問題が発生しました([])の後にスペースが続きます。だから私はそれがiTerm2の問題だとは思わない。

13
nifty

何が起こるかはあなたが押し続けることです  スペースバーを使用すると、 参照を介してHTMLで認識される 改行なしスペース が挿入されます。この改行しないスペースは、「OSX」の「OS」と「X」のように、特定の単語をくっつけたいテキスト処理で役立ちます。

明らかに、これはユニコード文字(00A0)であるため、_cat_は改行なしスペース)を参照するbashなど、ほとんどのコマンドラインユーティリティは失敗します。 、およびHex Fiendは、不適切な表現を使用しています。一方、一部のエディターは黙ってそれを取り除きます(たとえば、このエディターはここにあります)が、他のエディターはそれを特別に表現しています(たとえば、TextMateは空白の代わりにドットを表示します)。

2つの解決策があります:

14
slhck