for f in "$@"
do
echo # I'd like to skip this the first time
echo $f
print_info_about $f
done
Este fragmento de um script bash aceita alguns nomes de arquivos e imprime cada um deles e algumas informações sobre eles, com uma linha em branco entre eles.
Qual é uma maneira limpa de evitar a linha em branco inicial desnecessária?
De forma equivalente, qual é uma maneira limpa de echo
após cada iteração, exceto a última?
Mais limpo do que dividir o primeiro (ou último) item $@
e usar uma chamada extra para print_info_about
.
Idealmente, tão limpo quanto Ruby acumulando tudo em uma matriz de strings e depois .join("\n")
.
Isso chamará
separator='\n'
em vão durante a 2ª iteração e posteriormente. Mas a atribuição é interna ao shell e, portanto, rápida, portanto, o desempenho não deve ser prejudicado.A pergunta está marcada
bash
, então consertei sua cotação (variáveis não citadas se comportam bem emzsh
). Solafor f
é equivalente afor f in "$@"
.Observe que a solução acima não é uma maneira geral de "fazer algo somente após a primeira iteração". É adaptado ao seu "algo" específico (imprimindo uma linha em branco como separador).
A abordagem generalizada a seguir verifica se a variável não está vazia e é executada de forma arbitrária
do_something
condicionalmente.Se você concordar com uma linha extra em branco após o último item , você pode fazer: