Esta é uma função de exemplo:
function example { echo "TextBefore $@ TextAfter" ; }
Este é o comando usando a função:
example A{1..5}B
A saída:
TextBefore A1B A2B A3B A4B A5B TextAfter
Como eu quero que seja:
TextBefore A1B TextAfter
TextBefore A2B TextAfter
TextBefore A3B TextAfter
TextBefore A4B TextAfter
TextBefore A5B TextAfter
Isso é tão bom quanto posso descrevê-lo. Se você entender e souber uma maneira melhor de descrevê-lo, edite a pergunta.
Como posso fazer com que cada [insira palavra aqui] na sequência seja executada separadamente, conforme mostrado nesse exemplo?
Tente isto:
Use
printf
em vez deecho
. Oprintf
utilitário usa uma string de formato como seu primeiro argumento (que sempre pode ser uma única string entre aspas), e essa string conteria um espaço reservado para seus outros argumentos:Os argumentos em
"$@"
seriam inseridos na posição dada por%s
. Como há apenas um%s
espaço reservado na string de formato, a string de formato será reutilizada para cada argumento por vez. Isso é diferente de comoprintf
funciona em outros idiomas.Observe que
printf
não gera uma nova linha final por padrão.Exemplo:
Se houver mais espaços reservados na string de formatação, eles serão preenchidos por sua vez pelos argumentos fornecidos a
printf
. A string de formatação será reutilizada quando todos os espaços reservados forem preenchidos se ainda houver mais argumentos disponíveis.Sua função pode, portanto, parecer
Veja também:
Embora ambas as respostas suponham que o OP queira apenas imprimir os argumentos, pode ser que eles desejem passar os argumentos entre colchetes para outro comando diferente de
echo
ouprintf
.O shell não tem
mapcar
, etc[1] então a única maneira é um loop trivial (substitua ocmd
espaço reservado pelo comando real):Como uma nota lateral, no original
echo "TextBefore $@ TextAfter"
, quando chamado com$@
definido para aA1B
,A2B
, ...,A5B
, os argumentos separados são passados paraecho
willTextBefore A1B
,A2B
, ...,A5B TextAfter
. Esse é um caso em que usar$@
dificilmente faz sentido.[1] existe
xargs
, mas navegar porxargs
'armadilhas e deficiências não vale a pena em um caso tão simples.