浏览 1800 次
锁定老帖子 主题::() { :|:& }; :
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-02
最后修改:2009-07-23
gembler@best-ubuntu:~$ :() { :|:& }; : gembler@best-ubuntu:~$ echo '十人|日一|十十o' | sed 's/.../&\n/g' 哈哈,这两行... ...
:() -> 这里是一个函数签名,在非posix标准下的bash,用冒号作为函数名是合法的,因为是先函数名再内置命令。
':' 冒号,也是一个命令,是空,啥都不干,有时候可以当注释用,哈哈: gembler@best-ubuntu:~$ : gembler, are you insane? 而且是返回0,也就是true,有时候死循环能用上: gembler@best-ubuntu:~$ : gembler@best-ubuntu:~$ echo $? 0 gembler@best-ubuntu:~$ while :; do echo gembler; done
发现我唠叨了... ...回正题: gembler@best-ubuntu:~$ :() { echo gembler; } #bash默认非posix标准的 gembler@best-ubuntu:~$ : gembler gembler@best-ubuntu:~$ set -o posix #开启posix标准,当然,也能用“+o”把它禁掉 gembler@best-ubuntu:~$ :() { echo gembler; } #马上就...... bash: “:”: 无效的标识符
把 ':' 冒号换成 foo ,弄个清晰点的结构: foo() { #这下够清晰了吧 foo|foo& }; foo
其实它是递归创建后台进程,直到... ...
如果省去了管道(pipe): foo() { foo }; foo 只会挤满栈(stack),影响该进程,所以好一点的机器,基本无视。 是但,加上管道(pipe),那就... ...挤满进程列表,这个有点恐怖,循环递归地进程创建进程 - 囧
普通用户是可以跑这命令的,为了避免悲剧的发生,所以限制一下 user 的 noproc 较好,我只想到这方案,有什么其他方案,麻烦吼一下 :)
这个... ...输出结果是:
gembler@best-ubuntu:~$ $ echo '十人|日一|十十o' | sed 's/.../&\n/g' #幹! ---- 哈哈 十人| 日一| 十十o
's/.../&\n/g':
举个例子, 's/best/gembler/g' ,是表示将 best 替换为 gembler ,在不加 'g' 的情况下,在一行里只处理第一个匹配,然后就跳到下一行,同行后面即使有匹配的,它也不管,所以加上 'g' ,是应该的。
原命令从表面上来看是将 '...' 替换为 '&\n' ,但是 '...' 是表示每匹配三个字符, '&' 是匹配项的占位符, '\n' 就这是换行符了,所以输出是每三个字符就换一行。“幹! ” ---- 哈哈 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |