[CentOS] bash variable expansion moment

Stephen Harris lists at spuddy.org
Sun Nov 15 23:32:11 UTC 2009


On Sun, Nov 15, 2009 at 06:21:40PM -0500, ken wrote:

> > Is this what you wanted to do?
> 
> Stephen, thanks for your reply, but you're not seeing what I want to do.
>  Let me post my example once again:

You're not reading what I wrote.

> -------------------------
> Line()
> {
> echo This is line "$LINENO" $@

As I said in my previous mail, use ${BASH_LINENO[0]} instead, which tells
you the line it was called from.

Thus:

  $ cat func-file
  Line()
  {
    echo This is line "${BASH_LINENO[0]}" $@
  }

  $ cat x
  #!/bin/bash

  . ./func-file

  Line ... it should be $LINENO

  $ ./x
  This is line 5 ... it should be 5

> but it's not.  The num output in "This is line [num]" is whatever the
> line number is in the function definition.  (I.e., $LINENO is evaluated
> in the function.  Try it if you don't believe me.)

I explained to you _exactly_ why you are seeing the behaviour you are
seeing.  Your interpretation of what is happening is wrong.  $LINENO
gets _reset_ when you enter a function.

> What I'm looking for is the proper syntax to wrap around $LINENO in the

You can _not_ use $LINENO in this manner.  You _must_ use the BASH_LINENO
array.  That's what it was created for.

> function definition (in func-file) so that it's not evaluated there but
> is evaluated when the function is called in the second file.

You clearly don't understand how scripts are evaluated.  I've given you
the answer; I've proven it with output from the shell; I've referenced
the documentation; I've explained how this works.

I even told you the solution and what variable you should use.

I give up.

-- 

rgds
Stephen


More information about the CentOS mailing list