Um bash
script está usando uma variável Q
para algum propósito (fora do escopo desta pergunta):
Q=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
Como esse script é usado em um ambiente onde cada byte conta, isso é desperdício. Mas algumas soluções como
Q=0$(seq -s "" 9)$(echo {A..Z}|tr -d " ")
(para C
localidade) é ainda pior. Estou cego demais para ver o truque óbvio para gerar de forma compacta uma sequência tão simples?
Para qualquer shell capaz de expansão de chaves:
Usando
printf
:-->
Backticks em vez de
$()
salva um byte. Para Bash especificamente,printf -v var
printf em uma variável é bom, mas não menor que backticks.A maneira mais simples que conheço é usar a
bash
maneira:(
sed
é usado para remover o espaço entre os símbolos. O espaço entre colchetes é importante, caso contrário você verá todas as combinações de 0 a 9 e A a Z como0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z1A1B1C...
)Por sugerir, você pode encurtar o comando assim:
Desafio do quadro: não .
Qualquer maneira que você possa fazer isso será, na melhor das hipóteses, mais intensiva em recursos do que apenas escrever o que você já escreveu, e as maneiras mais eficientes também são menos portáteis (forçando você a escrever um "script Bash" em vez de um "script de shell").
Em geral, independentemente do idioma, a forma ideal para tabelas constantes é uma tabela constante literal, não algo gerado programaticamente em tempo de execução. Se for grande o suficiente para que a codificação seja suscetível a erros, gere-o programaticamente enquanto escreve o programa ou durante o "tempo de compilação" do programa e inclua a saída como uma constante literal em seu programa real.
Novamente, não , mas se você realmente precisa, um padrão que generaliza decentemente sem precisar de recursos especiais do shell é:
O
seq
utilitário pode ser escrito como uma função shell se você não quiser depender dele.