Bash expande array onde deveria usar apenas um elemento

Bash expande array onde deveria usar apenas um elemento

Meu script bash simples para buscar imagens de um Raspberry Pi com mais de um minuto:

#!/bin/bash

time=`date +"%FT%H_%M_%S"`
imagedir="/root/pilapse/images/"
files=`ssh pi find /home/pi/weatherPi-images/ -type f -mmin +1`

echo -e "\033[1;32mFetching images from Raspberry Pi\033[1;00m"

for currFile in "${files[@]}"; do
   echo -e "rsync -a --remove-source-files --info=progress2 -e ssh pi:$currFile $imagedir\n"
done

echo -e "rsync [...]"está aqui apenas um espaço reservado para depuração.

Resultado esperado:

rsync -a --remove-source-files --info=progress2 -e ssh pi:/home/pi/weatherPi-images/2016-02-01T13_22_20.jpg /root/pilapse/images/
rsync -a --remove-source-files --info=progress2 -e ssh pi:/home/pi/weatherPi-images/2016-02-01T13_14_07.jpg /root/pilapse/images/

Saída real:

rsync -a --remove-source-files --info=progress2 -e ssh 

horizon:/home/pi/weatherPi-images/2016-02-01T13_22_20.jpg
    /home/pi/weatherPi-images/2016-02-01T13_14_07.jpg
    /home/pi/weatherPi-images/2016-02-01T13_18_45.jpg
    /home/pi/weatherPi-images/2016-02-01T13_13_37.jpg /root/pilapse/images/

De alguma forma, o bash parece expandir o array aqui, mas por quê? No meu entendimento, o loop foreach acima currFilecontém apenas um caminho.

Responder1

Você não criou filescomo um array. Array precisa de parênteses:

files=(`ssh pi find /home/pi/weatherPi-images/ -type f -mmin +1`)

Observe que ele pode quebrar se os nomes dos arquivos contiverem espaços em branco.

informação relacionada