foo
2行目の代わりに次のように言うと思い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
foo
2行目の代わりに次のように言うと思いcommand not found
ます:
$ alias foo="echo bac" ; foo;
-bash: foo: command not found
$ foo
bac
$
2行目はなぜ言わないのfoo
ですか?次のシェルでテスト済み、同じ動作:
表示されている動作は、Bash リファレンス マニュアル(強調鉱山)で説明されています。
エイリアスの定義と使用に関するルールはやや混乱します。Bash は、その行のコマンドを実行する前に、少なくとも 1 行の完全な入力を常に読み取ります。コマンドの実行時ではなく、読み取り時にエイリアスが展開されます。したがって、別のコマンドと同じ行に記述されたエイリアス定義は、入力の次の行が読み込まれるまで有効になりません。その行のエイリアス定義に続くコマンドは、新しいエイリアスの影響を受けません。
おそらく、他のシェルもこのように動作します。