为什么有时在元字符周围需要空格?

几个月前,我在我的胳膊上纹了一个叉形炸弹,我跳过了空格,因为我认为没有它们看起来更好。 但令我沮丧的是, 有时 (并非总是),当我在shell中运行它时,它并不启动fork炸弹,但它只是给出了语法错误。

bash: syntax error near unexpected token `{:'

昨天它发生在我尝试在朋友的Bash shell中运行它时,然后我添加了空格,它突然生效, :(){ :|:& };:而不是:(){:|:&};:

空白是否重要; 我的手臂上纹有语法错误吗?!

它似乎总是在zsh中工作,但不是在Bash中。

一个相关的问题并没有解释任何有关空格的问题,这实际上是我的问题。 为什么Bash需要空白才能正确解析它?


BASH中有一个用于分隔令牌的字符列表。 这些字符称为元字符,它们是|& ;()<>空格制表符 。 另一方面,花括号( {} )只是构成单词的普通字符。

省略前的第二空间}会做,因为&是元字符。 因此,你的纹身应该至少有一个空格字符。

:(){ :|:&};:

只是纹身一个

#!/bin/zsh

shebang在上面,你会没事的。


大括号比特殊符号更像奇怪的关键字,并且确实需要空格。 例如,这与括号不同。 比较:

(ls)

哪些工作,并且:

{ls}

它查找名为{ls}的命令。 要工作,它必须是:

{ ls; }

分号停止左大括号作为ls的参数。

您所要做的就是告诉人们您正在使用比例字体,而且字体空间相当狭窄。

链接地址: http://www.djcxy.com/p/29119.html

上一篇: Why is whitespace sometimes needed around metacharacters?

下一篇: Create timestamp variable in bash script