私は見たことがhistory | grep blah
ありますhistory |grep blah
。history|grep blah
それも効果がありますが、誰もそれを使用していないようです。
空白にはどのような意味がありますか(たとえば、他のコマンドをパイピングするには別の空白を使用する必要があります)、または常にランダムですか?
答え1
bash
いくつか定義されています。メタ文字。からman bash
:
メタ文字
引用符がない場合、単語を区切るために使用される文字です。次のいずれか:
&; ()<>スペースタブ文字
メタ文字は単語を区別するため、スペースで囲まれているかどうかは重要ではありません。パイプ記号|
はメタ文字なので、分かるように周囲にスペースは必要ありません。
[
、]
、{
および 銀}
は=
いいえメタ文字。対照的に、その意味は空間に囲まれているかどうかによって大きく異なります。
スペースが必要な場合と必要ない場合の例
|
ご存知のように、空間に囲まれているかどうかは問題ではありません。 bashユーザーをしばしば混乱させるいくつかの例を考えてみましょう。考慮する:
$ (date)
Sun Mar 1 12:47:07 PST 2015
上記の括弧は、date
コマンドがサブシェルで実行されるように強制します。(
とはメタ文字なので、)
スペースは必要ありません。比較してみると:
$ {date}
bash: {date}: command not found
なぜなら{
}
いいえシェルが{date}
単語として扱うメタ文字です。コマンドを探すのではなく、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
ここで、シェルはv
引数を使用してコマンドを実行しようとします=date
。エラーは、名前付きコマンドが見つからないために発生しますv
。
答え2
スペースを使用しないと便利な状況があります。 USレイアウトを使用しない場合は、AltShiftL入力配管などのいくつかの組み合わせを使用する必要があります。これはそれ自体は問題ではありませんが、1つの結果は、時々その文字の前後に印刷されない文字を入力することができるということです。たとえば、フランス語のMacbook Proキーボードでは、をAltShiftL使用して入力する必要があります|
。すばやく入力すると、次のように誤って入力できますAltShift。LSpace
$ 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他のスペース(改行なしのスペース(U+00A0)) 次のエラーは理解しにくい場合があります。zsh: command not found: tail
答え3
管路あるプログラムの出力を別のプログラムの入力として使用できます。
スペースに関する限り、@jasonwryanが述べたように、読みやすさ/人間の好みの問題にすぎません。
「|」前と後のスペースバーは正常です。
-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
答え4
この場合、空間の唯一の意味は美学です。
つまり、コマンドを人間が読みやすくすることができます。