On Sun, May 6, 2012 at 6:07 PM, Dan Douglas
<address@hidden> wrote:
${$x} isn't a valid expansion, so it throws an error, the pattern isn't matched, and nothing happens.
I see it produces an error, but I still don't see why. If $x expands to 3 why don't I get ${3} and then the expansion of ${3}? Why is it illegal? What bash rule makes it so?
${$#} expands to the shell's PID, and tries to chop off a pattern matching the empty string at the beginning, which doesn't match the pattern at the end of "$*", so nothing happens. "$3" expands to "canary", which does match the pattern, so the string is modified.
Here you lost me all together. $$ is the shell PID. How do you see this as having to do with a PID? You're probably right, but I don't see by what logic you arrive at that conclusion.
Aren't expansions done from the inside out? Since $# is 3, shouldn't $# be expanded first to produce ${3} and then that expanded to, in my example, the last past parameter? I can answer my own question because I see it doesn't work, but I want to understand WHY it doesn't work.
It's the WHY I'm after. I can always code a work around.