Linux命令行下”!”的神奇用法
1、运行历史记录中的命令
/tmp/test>history 10 225 ll 226 cat jishi 227 history 10 228 ll 229 mkdir d2 230 touch abc 231 ll -R 232 ls 233 cat abc 234 history 10
!命令号,就可以执行该条命令:
/tmp/test>!232
ls
abc d1 d2 jishi
2、执行指定的之前执行过的命令
你可以运行 !-1、!-2 或者 !-7 等命令来执行你记录序列中的倒数第一条命令、倒数第二条命令已经倒数第七条等等。。。和上面的方式一样,你需要先用 history 命令来列出命令列表。
3、向一条新命令传递旧命令的参数避免重复输入
尤其在参数长的时候,这种用法特别好用。
/>ls /tmp/test/abc
/tmp/test/abc
/>cat !$
cat /tmp/test/abc
abc file content
4、如何用(!)处理两个以上的参数?
例如拷贝abc到d1目录下
/tmp/test>ls abc d1 d2 jishi
/tmp/test>cp abc d1/abc
这样我们就向CP命令传递了两个参数。第一个是 ‘abc’ ,第二个是’d1/abc’,为了区分它们,我们使用 echo 来打印每个参数。
/tmp/test>echo !^ echo abc abc /tmp/test>echo !cp:2 echo d1/abc d1/abc
可以注意到第一个参数可以使用 “!^” 来表示,剩下的参数就可以使用 “命令名:参数序号”这种方式来表示,比如 “!cp:2″。
再举个例子,如果你执行的某个命令为 “xyz”,命令 后面有5个参数而你想调用第四个参数,就可以使用 “!xyz:4″ 来调用它。当然,你可以使用 “!* “ 来表示所有参数。
5、通过关键词来执行之前的命令
格式:!命令
例如:
!ls为再次运行上次运行过的ls命令(省得再输入参数);
!echo为再次运行上次运行过的echo命令。
6、!! 最后一次运行的命令
这里,用!!代替了最后一次执行的echo abcd。
/tmp/test>echo abcd abcd /tmp/test>!!>afile echo abcd>afile /tmp/test>cat afile abcd
7、使用 !(文件名) 的方式来避免命令对某个文件的影响
如删除文件:
/tmp/test>ls abc afile d1 d2 jishi /tmp/test>shopt -s extglob #注意,需要开启extglob模式 /tmp/test>rm -rf !(jishi|d1|d2) /tmp/test>ls d1 d2 jishi
8、判断目录是否存在
[ ] 部分是判断表达式,-d 表示判断是否是目录(directory)。
/tmp/test>[ -d /tmp/test ] && echo yes || echo no #如果是目录,打印yes,否则打印no yes /tmp/test>[ ! -d /tmp/test ] && echo yes || echo no #如果不是目录,打印yes,否则打印no no
参考:
http://www.linuxidc.com/Linux/2015-05/117774.htm
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105e8d3d4f07dd743ca080462482d45f93130a1c187ba0fc7063565f8e99616706ae4256eaf23c76200357eddd97d65e98e6d27e20d66623716c913061c468aadc4755d651e34d99af0e96bbe74295b9d3a3c82253dd24056df1809c2a71&p=8b2a971889d203ff57ee93744e0a94&newp=c467c54ad5c44be50be29634615ebb23161cda386a848d0a3b8fd125926e4f171c0ba7ec67634b598fca786101ad4c5debf53274350125b499ca8e49d8afd4456edf653b2740d00b&user=baidu&fm=sc&query=%21ls%CA%C7%CA%B2%C3%B4%D2%E2%CB%BC&qid=960818a20006c419&p1=4

浙公网安备 33010602011771号