Я написал простой скрипт для проверки расширения псевдонима, но результат не ожидался, как показано ниже. Я просто хотел бы понять причину или причину такого поведения.
#!/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#