Hacker News new | past | comments | ask | show | jobs | submit login
Why is /usr/bin/test 4kiB smaller than /usr/bin/[? (vidarholen.net)
25 points by ingve on April 5, 2021 | hide | past | favorite | 5 comments



> 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.


Took a moment to realize you were naming the symbol "-" (i.e. hyphen-minus) specifically, and not using it grammatically as an en-dash.


It's more of a historical note at this point. modern shells have a builtin for [, to avoid that fork on every single if statement.


you might also like the fact that true is an executable. try 'man true'




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: