我想要某种看起来类似于 Bash 函数但不是函数的数据结构。一种按上下文组织命令的命名结构,它也应该允许前导选项卡。
当您有一个包含 20 个 Bash 函数但不需要 20 行函数调用的文件时,这很好。
比较:
重击功能:
x() {
echo "x"
}
x
我寻求的数据结构:
context {
echo "x"
}
我在此类数据单元格中组织命令的方式与使用函数组织命令的方式类似,但没有参数括号()
,也没有函数调用。
这种结构的名称是什么,你会怎么做?
笔记
结构的名称应该总是在它之前,在同一行中,就像函数一样。
here-document 不是解决方案,在这种情况下,我希望通过语法更简单。
它被称为复合命令,语法为
(这是一个复合命令的例子,循环等其他东西
for
也是复合命令)例如:
仅当
;
final 之前没有换行符时才需要}
:{ ...; }
构造中的命令在当前环境中执行,就像函数一样。有关这方面的更多信息,请参阅 POSIX 标准对复合命令的描述。
没有理由(或可能)命名这些部分,因为命名这样的部分或多或少等同于创建一个 shell 函数。此外,仅在稍后引用复合命令时才需要命名复合命令,这就是函数的用途。
显然可以使用注释:
以类似的方式,子shell可以有
这在当前 shell 的子环境中执行,并且对变量等的更改不会反映在当前 shell 中。
一般语法是
在这里,不需要final
;
before)
。出于好奇,shell 函数可以用来
(...)
代替{...;}
在本地环境中执行它们的代码:这可能有助于了解是否使用
sh
不支持局部变量(local
或typeset
inbash
)且不需要修改脚本环境的语言编写函数。评论够吗?
您可以按如下方式使用它们来重新组合命令并为这些组提供名称,并且没有任何东西禁止您使用 indentation :
您还可以使用 重新组合命令
{...}
,这在此上下文 AFAIK 中不会产生任何其他影响:如果您希望除了将这些上下文与本地范围相关联之外,还可以使用 subshells :
在这里试试