234: Escape Artist
Title text: Easier to escape: n-layered nested quotes or an iron maiden?
Harry Houdini 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 input some "escape character" to force to the computer to use a different interpretation of the following character (i.e. letter, number, or symbol). The escape character in most interpreters or languages is the backslash (\), and it's usually used to suppress the special meaning of the following symbol. For example, in most programming languages, strings are specified in quotation marks (e.g. "this is a string"). In this case, if the programmer tried to put a quotation mark inside the string, the compiler would interpret it as the end of the string, and probably end up having an error when it sees the rest of the string. Because of this, most languages also specify that \" can be used to literally just be a quotation mark, which allows programmers to put actual quotation mark characters into strings.
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. This behavior is a type of n-level nested quotation mentioned in the title text.
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.
- [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.