Why is whitespace sometimes needed around metacharacters?
Solution 1:
There is a list of characters that separate tokens in BASH. These characters are called metacharacters and they are |
, &
, ;
, (
, )
, <
, >
, space and tab. On the other hand, curly braces ({
and }
) are just ordinary characters that make up words.
Omitting the second space before }
will do, since &
is a metacharacter. Therefore, your tattoo should have at least one space character.
:(){ :|:&};:
Solution 2:
Just tattoo a
#!/bin/zsh
shebang above it and you'll be fine.
Solution 3:
Braces are more like odd keywords than special symbols, and do need spaces. This is different to parentheses, for example. Compare:
(ls)
which works, and:
{ls}
which looks for a command named {ls}
. To work, it has to be:
{ ls; }
The semicolon stops the closing brace being taken as a parameter to ls
.
All you have to do is tell people that you are using a proportional-font with a rather narrow space character.