Scripting - Pastas com espaços

0

Estou tentando escrever um script que seja robusto o suficiente para trabalhar com espaços.

Atualmente está em um loop for, mas o problema que estou tendo é pastas com espaços em seu nome.

ASOURCE="Home Photos 2012 camcorder" #example filename
if [ -d "$(echo $ASOURCE)" ] # If directory exists
then
#command
else
echo "File does not exist: " $1 #Error
echo "DIR :" $(echo $ASOURCE | sed 's/\ /\ /g')
fi

Ele falha na verificação. Eu tentei pré-escapar dos espaços, mas sem sucesso

    
por KG87 31.03.2014 / 16:50

1 resposta

2

Você deve sempre (*) citar suas variáveis, particularmente se elas contiverem entradas arbitrárias do usuário.

Nesse caso, se você estiver criando scripts com , use colchetes duplos para que você não precise citar (bash é inteligente dessa forma) e use printf "%q" para obter o bash para escapar do que precisa ser escapado:

ASOURCE="Home Photos 2012 camcorder" #example filename
if [[ -d $ASOURCE ]]; then
    # directory exists
    :
else
    # Note how these vars are quoted:
    echo "File does not exist:  $1"
    printf "DIR : %q\n" "$ASOURCE"
fi

(*) exceto quando você sabe exatamente quando não deseja citá-los.

    
por 31.03.2014 / 18:05