标题:超实用shell技巧 —— !$,以及!:$+1(free !:1)和上个命令各个参数的表示方法,Esc + . 和!$一样一样的。 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Sat, 24 Jun 2017 13:05:12 +0000 作者:jackxiang 地址:http://jackxiang.com/post/9274/ 内容: 在shell中,!$是一个特殊的环境变量,它代表了上一个命令的最后一个参数。 自己常常使用:Esc + . 和!$一样一样的。 $! 刚好写法相反,则表示Shell最后运行的后台Process的PID,看下面的例子: mkdir -p /tmp/a/b/c/d/e/f # ls !$ ls /tmp/a/b/c/d/e/f # ls !$ ls /tmp/a/b/c/d/e/f a.txt b.txt c.txt # rm -Rf !$ rm -Rf /tmp/a/b/c/d/e/f # ls !$ ls /tmp/a/b/c/d/e/f ls: 无法访问/tmp/a/b/c/d/e/f: 没有那个文件或目录 Shell参数变量之 !:0是命令行,!:1是参数1,!:2是参数2,如下所示: [root@justwinit-php-mysql_bj_sjs_10_44_202_177 ~]# echo hello world hello world [root@justwinit-php-mysql_bj_sjs_10_44_202_177 ~]# echo !:3 -bash: :3: bad word specifier [root@justwinit-php-mysql_bj_sjs_10_44_202_177 ~]# echo hello world hello world [root@justwinit-php-mysql_bj_sjs_10_44_202_177 ~]# echo !:2 echo world world [root@justwinit-php-mysql_bj_sjs_10_44_202_177 ~]# echo !:1 echo world world 例二: # free -m total used free shared buff/cache available Mem: 991 856 32 34 103 29 Swap: 1407 321 1086 # free !:1 free -m total used free shared buff/cache available Mem: 991 856 36 34 98 31 Swap: 1407 321 1086 =============================================== $ echo hello world hello world $ echo !$ echo worldworld $ echo "hello world" hello world $ echo !$ echo "hello world" hello world 这里为什么要用echo呢,请看下面,如果不用echo,!$输出的内容(world)会被shell当做一个命令来执行,所以就会报错 $ echo hello world hello world $ !$ world No command 'world' found, did you mean: Command 'tworld' from package 'tworld' (universe) world: command not found 应用场景示例 1、建立多层目录并进入建立好的多层目录 $ mkdir -p a/b/c/d/e $ cd a/b/c/d/e 改成 $ mkdir -p a/b/c/d/e $ cd !$ 上面mkdir -p命令用来一次性建立多层目录 2、编写文件后检测文件格式或者编译文件 $ vi a.php $ php -l !$ 或者 $ vi main.c $ gcc !$ 你可能不知道的超实用shell技巧 —— !$。 中,我们知道了 在shell中,!$代表了上一个命令的最后一个参数。那如果要获取上个命令的其它参数该怎么操作呢? 还是以echo hello world命令为例,下面就演示在该命令执行完成后,如何获取命令的各个参数甚至命令本身。 # echo helloworld hello world # echo !:1 echo hello hello # echo helloworld hello world # echo !:2 echo world world # echo hello world hello world # echo !:3 -bash: :3: bad word specifier 在调用!:3的时候出错了,因为上一次的命令只有两个参数。 下面你应该知道如何获取上次执行的是哪个命令了,那就是!:0,请看下面 # echo hello world hello world # echo !:0 echo echo echo 其实呢,有更好的表示方法,看下面 # echo hello world hello world # echo !# echo echo echo 总结 !# 上一个命令名 !$ 上一个命令的最后一个参数 !:n 上一个命令的第n个参数 参考文章 http://crazyof.me/blog/archives/171.html Generated by Jackxiang's Bo-blog 2.1.1 Release