質問: Bashのaliasに関する質問です。 例えば、`mkdir`と`cd`を一度に行いたいと思ったとき ``` alias mkcd='mkdir $1;cd $1' ``` とすると ``` $ mkcd sampledir mkdir: missing operand Try 'mkdir --help' for more information. ``` のように、引数`sampledir`が渡されません。 これを解決するには、 ``` function mkcd() { mkdir $1; cd $1; } alias mkcd=mkcd ``` のように関数を作成すれば良い、ということは知っているのですが、 **なぜ最初の例で動かないのか**、仕組みが分からず気になっています。 「動かないものは動かないんだよ!!!」と言われてしまえばそうなのですが、 ご存じの方がいればお知恵を貸してください。 環境・バージョン情報 ----------- * Ubuntu 14.04.3 LTS * GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
回答: alias の定義の実体部分はサブシェルではないので、$1 が評価されるのが (mkcd 実行時ではなく)alias 実行時点だからだと理解しています。 function で定義すると、全体がサブシェルのような扱いになり、位置 パラメータが有効になるのかな、と。