19
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

シェルのエイリアスで環境変数を使うときはクォーテーションに気をつけよう

Last updated at Posted at 2017-11-14

シェルのエイリアスで環境変数を使いたいときありますよね、多分。みなさんきっとあるでしょう。
dockerをrunしてカレントディレクトリをマウントしてごにょごにょしたいときとか。長ったらしいコマンド打ちたくないんですみたいな。

僕も例に漏れず、実際にエイリアスをいくつか貼っていたんですが、エイリアスのクォーテーションによって意図した挙動になっていないことがありました。

例えば

例えばなんですが、zshで貼ってたこんなエイリアス。

alias here='echo $PWD'

打ったらまぁ普通にカレントディレクトリが出ます。

$ here
/Users/ryosukes

これをダブルクォーテーションで括って名前を変えることにしました

alias there="echo $PWD"

打ったらまぁ普通にカレントディレクトリが出ます。

$ there
/Users/ryosukes

しかしディレクトリを掘って移動して実行すると

$ mkdir ~/develop
$ cd ~/develop
$ there
/Users/ryosukes

おやおや。カレントディレクトリを出してくれません。

じゃあhereではどうでしょう

$ cd ~/develop
$ here
/Users/ryosukes/develop

ちゃんと出してくれますね。

何が起きてるか

あまり深くは挙動の調査を行なっていないのですが、シングルクォーテーションだと実行時に変数展開され、ダブルクォーテーションだとシェルのログイン時に変数展開されるぽいです。

which コマンドでエイリアスを確認するとわかりやすいです。

$ which here
here: aliased to echo $PWD
$ which there
there: aliased to echo /Users/ryosukes

わかってしまえば「あぁそうだよねそりゃそうだ初心者かよ恥ずかしい」となるんですが、無駄にハマってしまったし今後も不意にやってしまいそうだと思ったので戒めのために残しておきたいと思います。

19
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?