:() { :|:& }; :

 

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 较好,我只想到这方案,有什么其他方案,麻烦吼一下 :)

  • echo '十人|日一|十十o' | sed 's/.../&\n/g'

这个... ...输出结果是:

 

gembler@best-ubuntu:~$ $ echo '十人|日一|十十o' | sed 's/.../&\n/g'    #幹! ---- 哈哈
十人|
日一|
十十o

 

's/.../&\n/g':

 

    举个例子, 's/best/gembler/g' ,是表示将 best 替换为 gembler ,在不加 'g' 的情况下,在一行里只处理第一个匹配,然后就跳到下一行,同行后面即使有匹配的,它也不管,所以加上 'g' ,是应该的。

 

    原命令从表面上来看是将 '...' 替换为 '&\n' ,但是 '...' 是表示每匹配三个字符, '&' 是匹配项的占位符, '\n' 就这是换行符了,所以输出是每三个字符就换一行。“幹! ” ---- 哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值