私は見た history | grep blah
およびhistory |grep blah
;およびhistory|grep blah
も機能しますが、誰も使用していないようです。
スペースに何らかの意味がありますか(たとえば、異なるコマンドへのパイプからのパイプは、スペースの使用が異なる必要があります)、または常に任意ですか?
bash
は、いくつかのメタ文字を定義します。 man bash
から:
メタキャラクター
引用符で囲まれていない場合に単語を区切る文字。次のいずれか:
| &; ()<>スペースタブ
メタ文字は単語を分離するため、スペースで囲まれているかどうかは問題ではありません。パイプ記号|
はメタ文字であるため、気づいたように、スペースを必要としません。
[
、]
、{
、}
、および=
はnotメタ文字であることに注意してください。対照的に、それらの意味は、空白で囲まれているかどうかに大きく依存します。
お気づきのとおり、|
がスペースで囲まれているかどうかは問題ではありません。 bashユーザーを一般的に混乱させるいくつかの例を考えてみましょう。検討してください:
$ (date)
Sun Mar 1 12:47:07 PST 2015
上記の括弧は、date
コマンドをサブシェルで実行することを強制します。 (
および)
はメタ文字であるため、スペースは必要ありません。対照的に:
$ {date}
bash: {date}: command not found
{
および}
はではないメタ文字であるため、シェルは{date}
を1つの単語として扱います。 date
コマンドを探す代わりに、{date}
という名前のコマンドを探します。見つからないため、エラーが発生します。
別の一般的な問題は、test
コマンドです。以下は正常に動作します:
$ [ abc ] && echo Yes
Yes
スペースを削除するとエラーが発生します。
$ [abc] && echo Yes
bash: [abc]: command not found
[
と]
はではないメタ文字であるため、シェルは[.bashrc]
を単一の単語として扱い、date
の例のように結果を返します、エラーです。
割り当てステートメントもスペースの影響を受けます。次の割り当ては成功しました:
$ v=date
$ echo $v
date
スペースを追加すると、割り当てが失敗します。
$ v= date
Sun Mar 1 12:55:05 PST 2015
上記では、シェルはv
を一時的に空に設定してから、date
コマンドを実行します。
=
の前にもスペースを追加すると失敗しますが、別の理由があります。
$ v =date
bash: v: command not found
ここで、シェルは引数=date
を使用してコマンドv
を実行しようとします。エラーは、v
という名前のコマンドが見つからなかったためです。
パイププログラムの出力を別のプログラムの入力として使用できます...
スペースに関する限り、@ jasonwryanが言及したように、読みやすさ/人事選好の問題だけです。
「|」の前後に1つのスペースバー規範です...
Column -tと一緒に使用して、1つのライナーだけでなく、出力もきれいにすることができます。
lnydex99uhc:depot_r user$ lsof | grep my | column -t
Microsoft 290 user txt REG 1,4 9515016 170972 /Library/Fonts/PCmyoungjo.ttf
bash 359 user cwd DIR 1,4 714 12246074 /Users/zatef/hw2/base/active/myapp
スペースを使用しないほうが便利な場合が1つあります。 US-Americanレイアウトを使用していない場合は、次のようないくつかの組み合わせを使用する必要がある場合があります。 AltShiftL パイプを入力します。これ自体は問題ではありませんが、1つの結果として、その文字の前または後に非印刷文字も入力することがあります。たとえば、フランスのMacbook Proキーボードでは、 AltShiftL 入力する|
。すばやく入力すると、誤って次のように入力する可能性があります。 AltShift(L、Space)
$ Sudo dmesg | tail
zsh: command not found: tail
echo "Sudo dmesg | tail" | od -a
0000000 s u d o sp d m e s g sp | � � t a
0000020 i l nl
あなたがそれを知らないなら AltShiftSpace 別のスペースを入力すると(改行しないスペース( + 00A ))、次のエラーは理解しにくい場合があります:zsh: command not found: tail
この場合のスペースの唯一の重要性は、美学です。
つまり、コマンドを人間が読みやすくするのに役立ちます。