> When you write if [ -e /etc/passwd ]; then .. that bracket is not shell syntax but just a regular command with a funny name. It’s serviced by /usr/bin/[, or (more likely) a shell builtin. This explains a lot of its surprising behavior, e.g. why it’s notoriously space sensitive: [1=2] is no more valid than ls-l/tmp.
To me this is even more interesting than the size thing. Wth seriously! It changes the way I will think of it next time I'm gonna use it.
I thought perl was a strange language with all the swearing cartoon characters, until I was introduced to bash and all the strange things like the hyphen for a default argument and what not. Writing shell scripts without stackoverflow is so hard because of all such idiosyncrasies (or maybe remanants of the past?).
And of course - has no special meaning to the shell or kernel. It is just convention that many commands treat it is a sentenal value (usually input from stdin or output to stdoht depending on the context)
The most important thing to understanding shell is that there are shell features, which have basically arbitrary parsing rules although they have some consistency, as well as commands which are parsed consistently into an argument list, but how that argument list is interpreted is completely up to the command.
Now while these may help you understand shell, they do not constitue a "good" programming language.
To me this is even more interesting than the size thing. Wth seriously! It changes the way I will think of it next time I'm gonna use it.
I thought perl was a strange language with all the swearing cartoon characters, until I was introduced to bash and all the strange things like the hyphen for a default argument and what not. Writing shell scripts without stackoverflow is so hard because of all such idiosyncrasies (or maybe remanants of the past?).