LINENO is set to zero during the execution of aliases or commands in
'eval'. This behaviour is different from that of other shells.

#! /usr/bin/env mksh
alias showlineno='echo $LINENO'
eval 'echo $LINENO'
showlineno

Actual output:
0
0

Expected output:
3 (or 1)
4

This behaviour seems to be inherited from pdksh, but no other shell has it.

Several shells (dash, yash, zsh in native mode, ksh93) start counting
from 1 when executing an 'eval', as if they considered it a separate
script, so they output 1 for the eval. But all shells output 4 for the
alias.

Another test script:
printf "$LINENO "
printf "$LINENO "
eval '  printf "$LINENO "
        printf "$LINENO "
        printf "$LINENO " '
printf "$LINENO\n"

Output on various shells:
            mksh: 1 2 0 0 0 6
            lksh: 1 2 0 0 0 6
           pdksh: 1 2 0 0 0 6
      AT&T ksh88: 1 2 3 3 3 6
      AT&T ksh93: 1 2 1 2 3 6
            bash: 1 2 5 6 7 6  (?!)
      FreeBSD sh: 1 2 1 2 3 6
            dash: 1 2 1 2 3 6
            yash: 1 2 1 2 3 6
    zsh (native): 1 2 1 2 3 6
        zsh (sh): 1 2 3 3 3 6  (like ksh88)

(Looks like I may also have to tell bug-bash that the bash behaviour is
weird, and zsh-workers that zsh's sh mode is not emulating any current sh).

HTH,

- M.

Reply via email to