AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1286082
Accepted
Mario Palumbo
Mario Palumbo
Asked: 2020-10-23 12:51:40 +0800 CST2020-10-23 12:51:40 +0800 CST 2020-10-23 12:51:40 +0800 CST

如果函数的名称是表达式的第一个单词,是否只能调用函数?

  • 772

如果函数的名称是表达式的第一个单词,是否只能调用函数,就像别名一样?
或者它也可以是表达式的第 n 个单词?
我无法模拟回答我这个问题的用例。
我找不到能回答我这个问题的指南。
作为意大利人,我发现很难在谷歌搜索引擎上找到合适的词。
您还可以在答案中提及来源吗?
谢谢你。

更新:
5 个答案(包括 1 个已删除和 2 个未回答)尽管该问题收到了 2 个不合理的反对票。一个简单易懂、完整且不需要细节的问题,无论如何插入只会混淆概念。尽管我对用户的反应和不友好的评论不满意,但@muru 的答案是最正确的。显然事情在 for 循环中发生了变化,但这是暗示的,我也使用 bash 多年了。
您的链接回答了我的问题:Function Definition Command,其中有一点说:
“
只要将函数名称指定为简单命令的名称,就应执行复合命令。
命令的操作数在复合命令执行过程中临时成为位置参数;特殊参数“#”也应更改以反映操作数的数量。特殊参数 0 应保持不变。当函数完成时,位置参数和特殊参数'#'的值应恢复为函数执行前的值。如果在复合命令中执行了特殊的内置返回(参见 return),则函数完成并在函数调用后的下一个命令继续执行。
“
谢谢@muru。

bash functions
  • 4 4 个回答
  • 259 Views

4 个回答

  • Voted
  1. Best Answer
    muru
    2020-10-27T01:46:05+08:002020-10-27T01:46:05+08:00

    请参阅Shell 命令的 POSIX 规范:

    命令是以下之一:

    1. 简单命令(参见简单命令)
    2. ...

    在2.9.1 Simple Commands中,强调我的:

    当需要执行给定的简单命令时[...]:

    1. 根据 Shell 语法规则识别为变量赋值或重定向的词将被保存,以便在步骤 3 和 4 中进行处理。

    2. 不是变量赋值或重定向的词应被扩展。如果扩展后仍有任何字段,则第一个字段应视为命令名称,其余字段是命令的参数。

    ...

    如果有命令名称,则应按照命令搜索和执行中的说明继续执行。...

    命令搜索和执行

    如果一个简单的命令产生一个命令名称和一个可选的参数列表,则应执行以下操作:

    1. 如果命令名称不包含任何字符,则将发生以下顺序中的第一个成功步骤:

      一个。如果命令名称与特殊内置实用程序的名称匹配,则应调用该特殊内置实用程序。

      ...

      C。 如果命令名称与此 shell 已知的函数名称匹配,则应按照函数定义命令中的描述调用该函数。...

    最后一点几乎是唯一指定函数执行的地方。其他一切本质上都是如此。所以,是的,函数名必须是第一个字段(在执行了各种扩展之后)。

    • 1
  2. bamm
    2020-10-27T18:31:36+08:002020-10-27T18:31:36+08:00

    是的,只能通过将函数名称作为表达式的第一个单词来调用函数。以下单词是函数的参数。bash 中的函数与任何其他命令或别名的工作方式相同。函数名不能是表达式的第 n 个单词。

    我明白你在说什么,因为我的语言也不是英语。(在我的语言中,我们也可以通过改变语调和添加问号将陈述变成问题,但在英语中,我们奇怪地需要重新排列单词才能将其变成问题??)

    • 0
  3. waltinator
    2020-10-23T14:19:25+08:002020-10-23T14:19:25+08:00

    别名仅在命令的第一个单词上扩展,而不在命令的参数中。

    阅读man bash。

    alias foo=`ls;rm *;`
    ...
    echo I said foo again
    

    以上是你要的吗?

    这不是bash工作原理,并且会使其无法使用。

    • -2
  4. waltinator
    2020-10-27T05:43:58+08:002020-10-27T05:43:58+08:00

    使用bash $()构造。

    command arg1 $(function function_args)
    
    • -2

相关问题

  • 同时复制到两个位置

  • 如何在 shell 脚本中创建选择菜单?

  • 从 bash 迁移到 zsh [关闭]

  • bashrc 还是 bash_profile?

  • 备份 bash 脚本未压缩其 tarball

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve