Como as outras respostas são íntimas, o problema é como o loop está processando a saída do comando ls
. Quando uma string é usada no loop for
, a string é dividida em palavras diferentes (com base no valor de IFS
como Darren diz) e sujeita a globbing e similares. Isso significa que você está passando uma string que é dividida pela linha e pelos espaços dentro da linha, então cada uma dessas palavras é definida em pic
.
A sugestão de Kamil resolve este problema porque você deixa o glob expandir para todos os nomes de arquivos diretamente, e todo o nome do arquivo é então atribuído a pic
.
Essa divisão de palavras acontecerá em qualquer lugar em que você usar a variável pic
mais tarde, portanto, se você não quiser que isso aconteça, certifique-se de colocar aspas duplas em torno dela. Por exemplo,
for pic in *; do
printf '%s\n' "$pic"
done
para imprimir cada um dos nomes, um por linha.