タイトルの通りですが、あまり知られていないのでご紹介します。
「$_」は直前のコマンドの引数を表します。
例を見てみましょう。
1 2 3 4 5 6 |
[root@kamatora ~]# ls -l /etc/hosts -rw-r--r-- 1 root root 174 Oct 18 2018 /etc/hosts [root@kamatora ~]# cat $_ 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@kamatora ~]# |
catコマンドで/etc/hostsの中身を確認することができます。
では、以下のように実行するとどうなるか。
- ls -l /etc/hosts
- ls -l /etc/motd
- ls -l $_
この場合、/etc/hostsの内容ではなく、/etc/motdの内容が表示されます。
試してみましょう。
1 2 3 4 5 6 7 8 9 |
[root@kamatora ~]# ls -l /etc/hosts -rw-r--r-- 1 root root 174 Oct 18 2018 /etc/hosts [root@kamatora ~]# [root@kamatora ~]# ls -l /etc/motd -rw-r--r--. 1 root root 51 Apr 26 2017 /etc/motd [root@kamatora ~]# ls -l $_ -rw-r--r--. 1 root root 51 Apr 26 2017 /etc/motd [root@kamatora ~]# [root@kamatora ~]# |
lsコマンドの結果、/etc/motdが表示されることがわかります。
「$_」、使い慣れると非常に便利なものです。
ちなみに/etc/hostsをコピーする場合は以下のような手順で実行できます。
- ls -l /etc/hosts
- cp -p ${_}{,_bk}
「${_}」の箇所は「$_」ですが、「{}」がないとエラーになります。
コピーしたファイル名は「/etc/hosts_bk」です。
1 2 3 4 5 6 7 |
[root@kamatora ~]# ls -l /etc/hosts -rw-r--r-- 1 root root 174 Oct 18 2018 /etc/hosts [root@kamatora ~]# cp -p ${_}{,_bk} [root@kamatora ~]# ls -l /etc/hosts /etc/hosts_bk -rw-r--r-- 1 root root 174 Oct 18 2018 /etc/hosts -rw-r--r-- 1 root root 174 Oct 18 2018 /etc/hosts_bk [root@kamatora ~]# |