有没有办法让别名扩展在 Bash 上的 if...fi 中工作?

有没有办法让别名扩展在 Bash 上的 if...fi 中工作?

检查这个脚本:

#!/bin/bash
if true;then
    alias WeirdTest='uptime';shopt -s expand_aliases
    WeirdTest
fi
WeirdTest

第一次WeirdTest执行时显示“未找到命令”。

答案1

这是 bash 的限制。引用手册:

有关别名的定义和使用的规则有些令人困惑。

Bash 在读取命令时会扩展别名。从这个意义上说,命令由完整的命令(整个if … fi块是一个复合命令)和完整的行组成(因此,如果您… fi; WeirdTest在 后面写入而不是添加换行符fi,则第二次出现的WierdTest也不会被扩展)。在您的脚本中,当if读取命令时,WeirdTest别名尚不存在。

一个可能的解决方法是定义一个函数:

if …; then
  WeirdTest () { uptime; }
  WeirdTest
fi
WeirdTest

如果您想使用别名以便它可以调用同名的外部命令,您可以通过在函数command前面添加来实现这一点。

WeirdTest () { command WeirdTest --extra-option "$@"; }

相关内容