Расширение псевдонима сценария оболочки bash не работает внутри оператора if

Я написал простой скрипт для проверки расширения псевдонима, но результат не ожидался, как показано ниже. Я просто хотел бы понять причину или причину такого поведения.

#!/bin/bash

shopt -s expand_aliases

function echo_dbg()
{
    echo "Line# ($lineno): $*"
}

if true; then
    alias echo_dbg='lineno=$LINENO echo_dbg'
    echo_dbg "I want to print line#" # Don't know why this echo_dbg is not expanded 
fi

echo_dbg "I want to print line line#" # this echo_dbg is expanded correctly

Мой вывод терминала:

Line# (): I want to print line#
Line# (15): I want to print line line#

Однако, если я переместил определение псевдонима над оператором fi, два echo_dbg работали должным образом.

#!/bin/bash

shopt -s expand_aliases

function echo_dbg()
{
    echo "Line# ($lineno): $*"
}

alias echo_dbg='lineno=$LINENO echo_dbg'

if true; then
    echo_dbg "I want to print line#"
fi

echo_dbg "I want to print line line#"

Мой вывод терминала:

Line# (13): I want to print line#
Line# (16): I want to print line line#

person Tony Su    schedule 10.03.2021    source источник
comment
Псевдоним, определенный в полной команде, не вступит в силу, пока оболочка не завершит обработку этой команды. Здесь есть аналогичный вопрос: stackoverflow.com/q/65266726   -  person oguz ismail    schedule 10.03.2021
comment
Понял, спасибо. решил мою головоломку.   -  person Tony Su    schedule 10.03.2021