234: Escape Artist
Title text: Easier to escape: n-layered nested quotes or an iron maiden?
Harry Houdini (born Erik Weisz/Ehrich Weiss) was a famous escape artist, whose more famous routines included escaping straitjackets and switching places with an assistant while locked inside a box.
The word "escape" also has a meaning in computer science. To "escape" something in programming means to replace a character or character sequence that would usually have a special meaning with another character sequence that doesn't have this special meaning. One common way of escaping is to have a special escape character that removes the special meaning from whatever character follows it. For instance, many programming languages enclose text strings in quotation marks (e.g.
"this is a string"). If you tried to directly put a quotation mark inside the string, the compiler would interpret it as the end of the string. To avoid this, the quotation mark is escaped with a backslash:
"He said, \"Goodbye!\", and went away."
The problem Cueball is having is related to the fact that the Bash shell interprets spaces as a special syntactic marker, when he actually just wants the spaces to be literal space characters. In this case, escaping the spaces with \ would force Bash to interpret his script in this way.
(There is one other way the escape character is sometimes used, but we'll ignore it for the sake of explaining the comic.)
The person talking to Cueball is having a separate conversation about Houdini as Cueball thinks aloud about his script issue, which results in diverging conversations. This eventually leads Cueball to suggest that Houdini might have "escaped" (freed himself from) handcuffs by "escaping" (removing the special meaning from) them with backslashes.
Sometimes, escape characters need to be "nested" - the backslash character itself can be escaped as \\ to produce a literal backslash, so if, for example, one needs to produce a literal quotation mark to output to a script file, and that script file also needs to have the quotation mark escaped, one would need to type it out as \\\", which would be output as \". If I needed to actually output that \\\", one would need to type it as \\\\\\\". The number of backslashes needed grows, and can be very hard to keep track of (see 1638: Backslashes). This behavior is a type of n-level nested quotation mentioned in the title text. This could, in practice, be very easy with syntax highlighting showing where the parser sees the string as ending, making it trivial to escape out the characters that should be escaped, e.g.:
"And then he said \"Hi\"."
In this example, the nested quotes could be escaped until the editor shows the uniform color of strings.
An iron maiden is supposedly a medieval torture device, currently believed to have been invented for tourism purposes much later than the time period when it was said to have been used. Harry Houdini's escapes include an escape from a purported "iron maiden," although it only vaguely resembles the "medieval" torture device.
- [Cueball sits before a computer on a desk while another man stands behind him.]
- Man: I was fascinated by locks as a kid. I loved how they turned information and patterns into physical strength.
- Cueball: Why does my script keep dying?
- [Closeup on Cueball sitting at the computer.]
- Man: And a lock invites you to try and open it. It's the hacker instinct. Only your ignorance stands in the way.
- Cueball: Wait it's passing bad strings.
- [Returns to the two shot of both men.]
- Man: I admired Harry Houdini, how he could open any lock and free himself from any restraint.
- Cueball: Ah - Bash is parsing the spaces.
- Man: Sure some of it was fakery and showmanship. But I still wonder how he so consistently escaped handcuffs.
- Cueball: Backslashes?
- Man: Huh?
- Cueball: Never mind.
add a comment! ⋅ add a topic (use sparingly)! ⋅ refresh comments!