t\imeor \cd(またはor "tim"eまたは'cd'or ${-##*}timeまたは${-+time}およびその他の引用と展開のすべての組み合わせで、最終的にtimeor に解決されると考えられますcd)、つまり、cdおよびを記述する別の方法timeです。
ただし、最終的には、シェル構文の解析と解釈に解決されるcdかtime、後で解決されます。特に、シェルのキーワード認識とエイリアスの置換が行われた後、それはかなりの時間発生します。
したがって、シェルがその言語でキーワードを探しているときti\me、timeシェルのキーワードとして認識されません。だから:
ti\me echo test
単純なコマンドがtime後に続くキーワードとは対照的に、シェルは単純なコマンドとして認識します。
次に、引用符ti\meが処理され(ここで、バックスラッシュが引用符をm必要としない文字を引用しているため、引用符文字が削除され、取得されますtime)、time コマンドが他のコマンドと同様に検索されます(組み込みのリスト内) 、関数、および実行可能ファイル$PATH。ほとんどの場合、/bin/timeここにあります)
の場合cd、cdシェル言語にはキーワードがありません。cd組み込みコマンド(これはに優先します/usr/bin/cd)のみです。ただし、cd(のようなalias cd=pushd)のエイリアスを定義した場合も同じです。エイリアスの置換は非常に早い段階で行われるため、引用を削除する前に、のエイリアスがある場合cdとない場合\cd(バックスラッシュを含むエイリアスを許可するシェルは多くないことに注意してください)、次のように記述します。
\cd dir
cdエイリアスが置換されていないことを確認しています。
簡単に言うと、コマンド名またはその一部を引用すると、それがシェルのキーワード(キーワードは、、、...のようなものwhileでforありif、一部のシェルのみのキーワード{ですtime)として表示されなくなり、エイリアスをバイパスします。 。
しかし内の実行可能ファイルに解決するには、そのコマンドを強制していない$PATHコマンドは、まだ間最初に検索され、機能(あなたが行うことによって回避することができますcommand time cmd...)と組み込みコマンドあなたが行うことによって回避することができます(env time cmd...私は知りませんが、組み込みtimeコマンドを持つシェル)。
一部のシェルでは、引用符がtypeset/ declare/ export/ local...ファミリーの特別な組み込みの動作に影響を与える可能性があることに注意してください。ローカル変数の割り当てには引用符が必要ですか?を参照してください。詳細については。