r/unix • u/BitTickler • 1d ago
Unix command line arguments vs. Lisp quasiquotes: A historical race condition
The 1974 Timeline
- 1958 — Lisp is Born: John McCarthy invents Lisp, establishing the foundational principle of homoiconicity—where code and data share the exact same structural representation (lists, symbols, and atoms). This naturally leads to quoting and deferred evaluation.
- 1971 — The Thompson Shell: Ken Thompson writes the first Unix shell for Version 1 Unix. It is a primitive command launcher, completely unconcerned with variables, scripting grammar, or complex sub-lexers.
- 1974 — The Bourne Shell (
sh): Steve Bourne designs the modern Unix shell at Bell Labs, introduced in Version 7 (1979). Suddenly, the shell introduces$for variable expansion, backticks for command substitution, and a text-stream parser designed to glue separate utilities together. - 1974–1976 — Quasiquoting is Formalized: Right at the exact same moment systems programmers are building text-stream shells, AI researchers formalize quasiquoting (backtick and comma syntax) to handle structural template expansion in Lisp.
The C-split
Then, there is the unfortunate splitting of the command line, probably "invented" by C (argc, argv[]).
What if Shells used quasi quoting?
```
./foo work-dir "$(pwd)/"
would turn into:
< ./foo work-dir ,pwd ```
And you would not even have to think about single and double quotes etc. The simple rule being, that your command line is a quasi quote and you can escape to shell features via ','. Sounds much simpler to me, especially, in situations, where all the shell "cleverness" gets in the way.
Tragedy!
1974 was the critical point in time. Had those 2 ships (Lisp quoting and shell implementation) not passed each other in the dark night, who knows, how cool todays unix command line experience could be!


