首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shopt在shell函数中不工作。

shopt在shell函数中不工作。
EN

Stack Overflow用户
提问于 2017-01-10 09:54:32
回答 1查看 1.4K关注 0票数 1

我在Ubuntu上工作,并使用bash shell。

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

当我尝试'shopt -s expanded_aliases;source env.sh;hal-on‘外部函数时,它可以工作,但是在一个函数中它不能工作。

代码语言:javascript
复制
do_build()
{
source env.sh

shopt -s expand_aliases

hal-on
}

# Main
do_build

错误消息

  • hal-on ./temp:第10行: hal-on:命令未找到

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-11-22 23:24:52

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

此外,函数中的源文件也不常见,也存在问题,除非它只是一堆变量集。事实上,除非您显式地将变量声明为“本地”,否则在外部执行源并没有什么不同。

我可以看到,有一种情况是,您可能只做在特定条件下在环境中定义的事情。如果你的变量集很复杂,我可以看到你不想这么做。但实际上把它限制在变量集上。没有函数/别名定义。

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

所以..。使用函数代替。

alias foo="bar baz"变成了foo(){ bar baz "$@" ;},一般情况下都是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41565923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档