Eu tenho um script bash que gostaria de fazer um loop nas linhas em stdin ou em cada argumento passado.
Existe uma maneira limpa de escrever isso para que eu não precise ter 2 loops?
#!/bin/bash
# if we have command line args...
if [ -t 0 ]
then
# loop over arguments
for arg in "$@"
do
# process each argument
done
else
# loop over lines from stdin
while IFS= read -r line; do
# process each line
done
fi
EDIT: Estou procurando uma solução genérica que use apenas um único loop, pois acho que quero fazer isso com bastante frequência, mas sempre escrevi 2 loops e, em vez disso, chamei uma função. Então, talvez algo que transforme stdin em uma matriz, para que eu possa usar um único loop?
Crie dados para o seu
while read
loop:Observe que seu
concat
exemplo pode ser feito com owhile read
loop substituído portr '\n' ','
ou similar.Além disso, o
-t
teste não diz nada sobre se você tem argumentos de linha de comando ou não.Como alternativa, para processar os argumentos da linha de comando e a entrada padrão (nessa ordem):
Ou, usando a notação de atalho que algumas pessoas parecem gostar:
Também podemos usar o redirecionamento da entrada padrão:
teste com:
Com
bash
especificamente, você poderia fazer: