Quando uso o seguinte, obtenho um resultado conforme o esperado:
$ echo {8..10}
8 9 10
Como posso usar essa expansão de chave de maneira fácil, para obter a seguinte saída?
$ echo {8..10}
08 09 10
Eu agora que isso pode ser obtido usando seq
(não tentei), mas não é isso que estou procurando.
Informações úteis podem ser que eu estou restrito a esta versão do bash. (Se você tem uma zsh
solução, mas não tem bash
solução, compartilhe também)
$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)
bash
arithmetic
brace-expansion
Bernhard
fonte
fonte
Respostas:
Prefixe o primeiro número com a
0
para forçar cada termo a ter a mesma largura.Na seção da página de manual do bash na expansão de chaves:
Observe também que você pode usar
seq
com a-w
opção para equalizar a largura preenchendo os zeros à esquerda:Se você deseja mais controle, pode até especificar um formato de estilo printf:
fonte
echo {08..10}
solução, ela é introduzida apenas para a versão 4 e posterior do bash.perl
vários utilitários (por exemplo ), um zero à esquerda indica um número octal. Suponho que não é muitas vezes você quer uma sequência de números octais ...seq
o-w
comutador da seguinte forma:seq -w 003
produz os números 001, 002 e 003.foo_00001.someextension
que quase todos os contextos de classificação forneçam uma ordenação sadia.se você usa printf
isso forçará dois caracteres e adicionará um 0. inicial. Caso você precise de 3 dígitos, poderá mudar para "% .3d".
fonte
printf
solução, mas não está realmente facilitando isso. Eu estou esperando que há algum truque escondido que faz o trabalho :)Use um intervalo que comece com um dígito constante e retire esse dígito:
ou sem usar um comando externo:
Para uso em um loop for:
embora, nesse caso, um loop while seja mais claro e funcione em qualquer shell POSIX:
fonte
for
laço de qualquer maneira.Eu tenho a mesma versão do bash do pôster original (
GNU bash, version 3.2.51(1)-release
) e{08..12}
não funciona para mim, mas o seguinte:É um pouco mais entediante, mas funciona na versão OP do bash (e versões posteriores, eu diria).
fonte
Para referência, acho que a largura fixa automática ocorre apenas com a versão mais recente do bash:
fonte
zeros, ini e fin são vars, então é fácil, você escreve apenas zeros que você diz em 'zeros' para ini fin sem problemas;)
fonte