環境変数についてよく分かってなかったのでまとめる@Gitbush on Windows

## Linuxコマンドは実は・・・

Linuxコマンド、たとえば`pwd`を打ってみる

[![https://gyazo.com/db7a4b0805d2bf2d5d6b1bbccdadecc8](https://i.gyazo.com/db7a4b0805d2bf2d5d6b1bbccdadecc8.png)](https://gyazo.com/db7a4b0805d2bf2d5d6b1bbccdadecc8)

これはあたりまえ。
では、`which pwd`を打ってみる

[![https://gyazo.com/d012b13c21e191af2a11d8183afe07d8](https://i.gyazo.com/d012b13c21e191af2a11d8183afe07d8.png)](https://gyazo.com/d012b13c21e191af2a11d8183afe07d8)

これは一体？何？
そうなんです。
`pwd`は実は/usr/bin/pwdを実行しているのです。

ためしに`/usr/bin/pwd`を打ってみます。

[![https://gyazo.com/c034388cdacae3f85a2eb841a6bc124c](https://i.gyazo.com/c034388cdacae3f85a2eb841a6bc124c.png)](https://gyazo.com/c034388cdacae3f85a2eb841a6bc124c)

予想通りです。
念のため、`/usr/bin`ディレクトリも覗いてみましょう。
`cd /usr/bin`を打ってみます。

[![https://gyazo.com/023b6e06e973f5708c0e03bd93ecec71](https://i.gyazo.com/023b6e06e973f5708c0e03bd93ecec71.png)](https://gyazo.com/023b6e06e973f5708c0e03bd93ecec71)

大量ですが右下の方にありましたね。
ただ、`pwd.exe`です。

本来は`/usr/bin/pwd.exe`と打つべきなはずです。
一旦`/usr/bin/pwd.exe`と打ってみます。

[![https://gyazo.com/74ee93bf33656e3ec3adc554bd76ae72](https://i.gyazo.com/74ee93bf33656e3ec3adc554bd76ae72.png)](https://gyazo.com/74ee93bf33656e3ec3adc554bd76ae72)

予想通りです。

**つまり`pwd`の本当の姿は`/usr/bin/pwd.exe`なのです。**

## なぜ省略できるのか？

`printenv PATHEXT`コマンドを打ってみましょう。
これは変数`PATHEXT`に登録されているもの一覧を表示するコマンドです。

[![https://gyazo.com/31de165b1530ff9931300a3eb339e4ef](https://i.gyazo.com/31de165b1530ff9931300a3eb339e4ef.png)](https://gyazo.com/31de165b1530ff9931300a3eb339e4ef)

この一覧で出てきた`;`で区切られた拡張子11個は省略してもよい拡張子として登録されているのです。

`printenv PATH`コマンドを打ってみましょう。
これは変数`PATH`に登録されているもの一覧を表示するコマンドです。

[![https://gyazo.com/8e0a167ec28399db2f927dc090d01fa0](https://i.gyazo.com/8e0a167ec28399db2f927dc090d01fa0.png)](https://gyazo.com/8e0a167ec28399db2f927dc090d01fa0)

大量に出てきましたが、この一覧で出てきた`:`で区切られたディレクトリ以下の実行ファイル（`〇〇〇.exe`みたいなやつ）は、ディレクトリ部分を省略できるのです。

なので、`/usr/bin/pwd.exe`を`pwd`に省略することができるのです。

## PATHの追加とか削除は？

では当然、`PATH`や`PATHEXT`への追加登録や削除したくなってきますよね。

その方法を説明します。
どうせなら今流行り？の`Mecab`でやってみましょう。

### 1. MeCabのダウンロード

`https://github.com/ikegami-yukino/mecab/releases/tag/v0.996`の`mecab-0.996-64.exe`をダウンロードして実行します。

### 2. mecabコマンドを試す

`/c/'Program Files'/`以下にmecabがインストールされます。
※各PCにより異なるケースがあります。

そしてMeCab実行ファイルの`mecab.exe`は`/c/'Program Files'/mecab/bin/`以下にあります。
つまり`/c/'Program Files'/mecab/bin/mecab.exe`だと実行可能なはず。
そして`.exe`は省略可なので`/c/'Program Files (x86)'/mecab/bin/mecab`だと実行可能なはず。

```
$ /c/'Program Files (x86)'/mecab/bin/mecab
ちゃうちゃうちゃうんちゃう？
 ち      動詞,自立,*,*,五段・ラ行,体言接続特殊２,ちる,チ,チ
 ゃうちゃうちゃうんちゃう        名詞,一般,*,*,*,*,*
 ？      記号,一般,*,*,*,*,？,？,？
 EOS
```

予想通り！
でも`mecab`だと反応しません。

```
$ mecab
bash: mecab: command not found
```

### 3. ~/.bashrcに登録したい変数の命令文を書き込む

まずは`~/.bashrc`を作りましょう。
`touch ~/.bashrc`ですね。

```
$ touch ~/.bashrc
```

中身見てみましょう。もちろん何も書かれていません。

```
$ cat ~/.bashrc
```

では書き込みましょう。

```
$ echo 'export PATH="$PATH:/c/'Program Files'/mecab/bin"' >> ~/.bashrc
$ echo 'alias mecab="mecab.exe"' >> ~/.bashrc
```

`echo '書き込みたい文字列' >> 書き込みたいファイル`です。
`export PATH="$PATH:`の後ろに登録したいパスを続けます。
`$PATH`は現状のPATHです。

念のためちゃんと書き込まれているか確認しましょう。

```
$ cat ~/.bashrc
export PATH="$PATH:/c/'Program Files'/mecab/bin"
```

大丈夫そうです。

### 4. ~/.bashrcを実行してPATHに登録する

まだ`~/.bashrc`に書き込んだだけです。
`printenv PATH`コマンドを打ってみましょう。登録されていないことが確認できます。
※`printenv PATH`コマンド実行結果は省略します。私のPCには、はずかしPATHが多量に含まれているため。

`~/.bashrc`を実行しましょう。

```
$ source ~/.bashrc
```

すると`printenv PATH`コマンドで新たにPATHが増えていることが確認できます。

### 5. mecabコマンドを試してみる。

PATHが追加登録されたので`mecab`で実行可能なはずです。
やってみましょう。

```
$ mecab
ちゃうちゃうちゃうんちゃう？
 ち      動詞,自立,*,*,五段・ラ行,体言接続特殊２,ちる,チ,チ
 ゃうちゃうちゃうんちゃう        名詞,一般,*,*,*,*,*
 ？      記号,一般,*,*,*,*,？,？,？
 EOS
```

いけました！