10

foo2行目の代わりに次のように言うと思いcommand not foundます:

$ alias foo="echo bac" ; foo;
-bash: foo: command not found
$ foo
bac
$

2行目はなぜ言わないのfooですか?次のシェルでテスト済み、同じ動作:

  • バッシュ 3.2.5
  • zsh 5.0.8
  • ダッシュ 0.5.9
  • ビジーボックス 1.25.0
4

2 に答える 2

9

表示されている動作は、Bash リファレンス マニュアル(強調鉱山)で説明されています。

エイリアスの定義と使用に関するルールはやや混乱します。Bash は、その行のコマンドを実行する前に、少なくとも 1 行の完全な入力を常に読み取ります。コマンドの実行時ではなく、読み取り時にエイリアスが展開されます。したがって、別のコマンドと同じ行に記述されたエイリアス定義は、入力の次の行が読み込まれるまで有効になりません。その行のエイリアス定義に続くコマンドは、新しいエイリアスの影響を受けません。

おそらく、他のシェルもこのように動作します。

于 2016-07-22T13:05:36.483 に答える