On Thu, Jan 30, 2025 at 13:59:37 +0100, Roger Price wrote: > alias w3m='/usr/bin/w3m -no-cookie -o auto-image=TRUE '
> w3m() { /usr/bin/w3m -no-cookie -o auto-image=TRUE $@ ; } > > and received the error message > > bash: .bashrc: line 86: syntax error near unexpected token `(' > bash: .bashrc: line 86: `w3m() { /usr/bin/w3m -no-cookie -o auto-image=TRUE > $@ ; }' The problem is you *already* have the alias, and the alias gets expanded when you try to define the function. hobbit:~$ alias grok=true hobbit:~$ grok() { echo hi; } hobbit:~$ grok hi hobbit:~$ true hi Aliases are insidious like that. > I wrote > > [[ $(type -t w3m) == "w3m" ]] && unalias w3m Well, that doesn't work. I'm not sure what you were going for there, but that's not what "type -t" says for an alias. hobbit:~$ type ll ll is aliased to `ls -l' hobbit:~$ type -t ll alias To answer the question in the Subject header: yes, a function may be named w3m (without the quotes). Bash allows a stupidly large range of characters to be used in function names, including forward slashes. hobbit:~$ /bin/rm() { echo haha; } hobbit:~$ ls -l badfile ls: cannot access 'badfile': No such file or directory hobbit:~$ touch badfile hobbit:~$ /bin/rm badfile haha It's just your alias that was in the way. Even if you were writing for a pure POSIX sh (not that any such thing exists in reality), w3m would be a legal function name, because it's a legal variable name. All legal variable names are also legal function names under POSIX rules.