bash - shopt 在 shell 函数中不起作用

标签 bash shell ubuntu shopt

我在 Ubuntu 上工作并使用 bash shell

我正在尝试执行如下所示的“别名”,但它不起作用

当我尝试 'shopt -s expanded_aliases;源环境.sh; hal-on' 在函数外部有效,但在函数内部无效

do_build()
{
source env.sh

shopt -s expand_aliases

hal-on
}

# Main
do_build

错误信息

  • 哈尔昂 ./temp: 第 10 行:hal-on:找不到命令

我做错了什么?

最佳答案

别名在 bash 中有奇怪的行为,使用函数几乎总是更好。您在示例中所拥有的可能是函数中别名的定义,我不确定那里会发生什么。

另外,在一个函数中使用源文件是不常见的,而且有问题,除非它只是一堆变量集。事实上,除非您明确声明变量是“本地的”,否则在外部执行源代码几乎没有区别。

我可以看到您可能遇到的一种情况是仅在特定条件下执行环境中定义的事情。如果您的变量集很复杂,我可以看到您不想这样做。但实际上将其限制为变量集……没有函数/别名定义。

阅读 bash 手册页中的别名。搜索“别名未展开”。它与“别名在读取时扩展”有关。通过一些实验,即使在函数定义之前设置了 shopt,别名似乎也不会在函数内展开。

所以...改用函数。

alias foo="bar baz" 变为 foo(){ bar baz "$@";} 并且通常操作相同。

关于bash - shopt 在 shell 函数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41565923/

相关文章:

linux - 为什么 "su - -c"会导致失败?

unix - 如何设置 $PATH 以便 `ssh user@host command` 起作用?

在 R 中检索工作区

python - NameError : name 'hasattr' is not defined - Python3. 6, Django1.11, Ubuntu16-17, Apache2.4, mod_wsgi

c - 64 位 Ubuntu 上的利用

linux - 在 bash 中比较 *nix 时间戳的最佳方法

bash - 如何获取关联数组(字典)的最后一个键

linux - Awk:如何用新行构建一个字符串变量?

bash - 我可以在 Bash 的命令行上设置环境变量吗?

regex - 仅调整具有特定图案的图像