Date: Sun, 29 Sep 2024 23:59:48 +0000 (UTC) From: RVP <r...@sdf.org> Message-ID: <cea12c78-54d6-dbfc-84bd-f1674ecfe...@sdf.org>
| This is _very_ surprising; esp. when /bin/sh doesn't allow chars. | like `/' and `.' in the function name. Huh? sh $ a.v() echo I have a dot in my name sh $ a.v I have a dot in my name You can even define: sh $ .() echo My name is dot, but I can never be called but as that suggests doing do is a waste of time, as there is a special builtin '.' and those are always sought before functions. But: sh $ ..() echo dots everywhere sh $ .. dots everywhere You're right about '/' though, as the command search rules preclude ever finding a function whose name contains a '/' hence defining one is certain to be futile (unlike with '.'). (And no, quoting it wouldn't help, quotes are removed before command searching happens.) But / (plus \0 which can't even be entered) is the only character prohibited, though for some (like $) the name needs to be quoted to work (that's just because of the nature of the parser, and could be fixed, possibly, but isn't really worth it - in all these cases the name would need to be quoted to call it anyway, to avoid expansions happening - which never happen to a function name in the definition). sh $ \ () echo I am a space sh $ ' ' I am a space sh $ \ I am a space (the 2nd of those commands has a space after the \ which might, or might not, survive the e-mail transport and various MUAs). | Can't see a use for this--except to suppress an error message | $ ''() false | [...] | $ unset foo | $ if "$foo"; then echo set; else echo unset; fi Yes, that's the context in which this (mostly nonsense) diversion arose. | or, to create (mildly) obfuscated fork-bombs: That can be done with any name, it would be more likely to be productive using something like "ls" that a user is likely to type, unlike '' as a command name. But in general, no, there's probably not a lot of use for it, but nor is there any particular reason to add special case code to prohibit it. kre