私は見たことが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
。