t\ime
or \cd
(またはor "tim"e
または'cd'
or ${-##*}time
または${-+time}
およびその他の引用と展開のすべての組み合わせで、最終的にtime
or に解決されると考えられます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
...ファミリーの特別な組み込みの動作に影響を与える可能性があることに注意してください。ローカル変数の割り当てには引用符が必要ですか?を参照してください。詳細については。