Desejo algum tipo de estrutura de dados que se pareça com uma função Bash, mas não seja uma função. Uma estrutura nomeada para organizar comandos por contexto, que também deve permitir guias iniciais.
Isso é bom quando você tem um arquivo com, digamos, 20 funções Bash, mas não precisa de 20 linhas de chamadas de função.
Comparação:
Função Bash:
x() {
echo "x"
}
x
A estrutura de dados que procuro:
context {
echo "x"
}
Eu organizo os comandos em tal célula de dados de forma semelhante a como eu organizaria com uma função, mas sem parênteses de parâmetro ()
e sem uma chamada de função.
Qual é o nome dessa estrutura e como você faria isso?
Notas
O nome da estrutura deve sempre vir antes dela, na mesma linha, assim como em uma função.
Um here-document não é uma solução, neste caso, desejo algo mais mínimo por meio da sintaxe.
É chamado de comando composto e a sintaxe é
(este é um exemplo de um comando composto, outras coisas como
for
loops etc. também são comandos compostos)Por exemplo:
O
;
só é necessário se não houver nova linha antes do final}
:Os comandos na
{ ...; }
construção são executados no ambiente atual , assim como para uma função.Mais informações sobre isso estão disponíveis na descrição de comandos compostos do padrão POSIX .
Não há razão (ou possibilidade) para nomear essas seções, pois nomear tal seção é mais ou menos equivalente a criar uma função shell de qualquer maneira. Além disso, nomear um comando composto seria necessário apenas se for referido posteriormente, para o qual as funções são usadas.
Comentários podem obviamente ser usados:
De maneira semelhante, um subshell pode ser obtido com
Isso é executado em um ambiente filho do shell atual e as alterações nas variáveis, etc., não serão refletidas no shell atual.
A sintaxe geral é
Aqui, não há necessidade de uma final
;
antes)
.A título de curiosidade, as funções shell podem usar
(...)
no lugar de{...;}
para executar seu código em um ambiente local:Isso pode ser útil para saber se está escrevendo uma função em uma
sh
linguagem que não suporta variáveis locais (local
outypeset
embash
) e que não precisa modificar o ambiente do script.Os comentários são suficientes?
Você pode usá-los da seguinte maneira para reagrupar comandos e fornecer um nome a esses grupos, e nada o proíbe de usar indentação:
Você também pode reagrupar comandos com
{...}
, o que não teria nenhum outro efeito neste contexto AFAIK :Se você quiser, além de associar esses contextos a um escopo local, poderá usar subshells:
tente aqui