Estou aprendendo scripts de shell de um livro desatualizado, e parece-me realmente útil ter um programa que apenas retorna uma sequência de números delimitados por espaços como
$ range 10 20
10 11 12 13 14 15 16 17 18 19 20
Então, se você estiver executando um script de shell, poderá ter
for i in `range 10 20`; do some stuff with numbers in that range;done
existe tal coisa, ou eu mesmo preciso escrever?
range
porseq
no seu exemplo. separador padrão é de nova linha, ter espaços:seq -s " " 10 20
for
loop - ou mesmo qualquer comando geral que divida argumentos - a menos que você defina o IFS de maneira diferente.seq
pois não é especificado pelo POSIX.Respostas:
seq
faz parte do coreutils.Saída:
Se você fornecer apenas 2 argumentos
seq
, o incremento será 1:fonte
sed
também possui boas opções, como-s
definir o separador ou-w
qualificar a largura. E você pode fornecer um incremento:seq -w -s ", " 0 5 20
resulta em 00, 05, 10, 15, 20 .seq
?seq 10 20
pode também ser um exemplo simples pena acrescentar;)Bash seria suficiente?
Você pode fazer muitas coisas com a expansão de chaves . O Bash 4 também suporta faixas acolchoadas, por exemplo
{01..20}
.Observe que o Bash não é considerado portátil e não é um utilitário Unix padrão. Embora você possa assumir com segurança que ele está instalado na maioria dos Linux modernos, não use isso em um script que planeja executar em todos os tipos de máquinas semelhantes ao Unix.
fonte
seq
. O uso é como no seu exemplo:seq -s " " 10 20
. O-s
parâmetro é necessário porque, por padrão, os valores são separados por\n
.seq
é um utilitário GNU, e, portanto, não um "programa padrão UNIX"for i in {001..010}; ... ; done
e o número será preenchido com zero para 3 dígitos.Se você deseja algo estritamente portátil (ou seja, que não dependa de extensões bash específicas ou comandos não especificados pelo POSIX)
fonte
/dev/null
ou< /dev/null
a isso?If the awk program contains no actions and no patterns, but is otherwise a valid awk program, standard input and any file operands shall not be read and awk shall exit with a return status of zero.
Antes
seq
da versão 10.7, não havia no Mac OS X, masjot
devido à herança do BSD.Exemplo:
fonte
Use um
for
loopfonte
Você pode usar
seq
ou, se não tiver, pode escrever você mesmo:Uso:
Ou:
fonte
Para fins de completude, aqui algo que funcionará com algumas variantes mais antigas do Unix (desde que tenham o perl instalado). Não é realmente elegante.
fonte