函数是否只能在其名称是表达式的第一个单词时才被调用,就像别名的情况一样?
或者它也可以是一个表达式的第 n 个单词?
我无法模拟一个用例来回答我的这个问题。
我找不到一个指南来回答我的这个问题。
作为意大利人,我发现在谷歌搜索引擎上很难找到合适的词。
你能在答案中提到来源吗?
谢谢。
更新:
尽管该问题收到了 2 次不合理的反对票,但仍有 5 个答案(包括 1 个已删除和 2 个非答案)。这个问题简单易懂,完整无缺,不需要细节,如果插入细节只会混淆概念。尽管我对用户的反应和不友好的评论感到不满,但 @muru 的答案是最正确的。显然,for 循环中的情况会发生变化,但这是暗示,我也使用 bash 多年了。
您的链接回答了我的问题:函数定义命令其中有一个点表示:
“
每当函数名称被指定为简单命令的名称时,就应执行复合命令。
在复合命令执行期间,命令的操作数应暂时变为位置参数;特殊参数“#”也应更改以反映操作数的数量。特殊参数 0 应保持不变。当函数完成时,位置参数和特殊参数“#”的值应恢复为函数执行前的值。如果在复合命令中执行了特殊的内置返回(参见 return),则函数完成,并在函数调用后恢复执行下一个命令。
“
谢谢 @muru。
答案1
命令是下列之一:
- 简单命令(参见简单命令)
- ...
并且在2.9.1 简单命令,重点是我的:
当需要执行给定的简单命令时[...]:
根据 Shell 语法规则识别为变量赋值或重定向的单词将被保存下来,以便在步骤 3 和步骤 4 中进行处理。
不是变量赋值或重定向的字词应被扩展。如果扩展后仍有字段,第一个字段应被视为命令名称其余字段是该命令的参数。
...
如果有命令名,则执行应按照命令搜索和执行。 ...
命令搜索和执行如果简单命令产生命令名称和可选参数列表,则应执行以下操作:
如果命令名称不包含任何字符,则将发生以下序列中的第一个成功步骤:
a. 如果命令名称与特殊内置实用程序的名称匹配,则应调用该特殊内置实用程序。
...
C。 如果命令名称与此 shell 已知的函数名称匹配,则应按照中所述调用该函数函数定义命令。 ...
最后一点几乎是指定函数执行的唯一位置。其他一切基本上都归结于此。所以,是的,函数名称必须是第一个字段(在执行了各种扩展之后)。
答案2
是的,只能通过将函数名称作为表达式的第一个字来调用函数。后面的字是函数的参数。bash 中的函数的工作方式与任何其他命令或别名相同。函数名称不能是表达式的第 n 个字。
我明白你的意思,因为我的语言也不是英语。(在我的语言中,我们也可以通过改变语调和添加问号将陈述句变成疑问句,但在英语中,我们奇怪地需要重新排列单词才能将其变成疑问句??)
答案3
别名仅在命令的第一个字上展开,而不是在命令的参数中展开。
读man bash
。
alias foo=`ls;rm *;`
...
echo I said foo again
以上就是您所寻求的吗?
这不是bash
工作原理,并且会使其无法使用。
答案4
使用bash
$()
构造。
command arg1 $(function function_args)