Processe uma lista de arquivos com espaço nos nomes dos arquivos [duplicados]

2

Estou tentando desenvolver um script bash que processa uma lista de arquivos que podem conter nomes de espaços.

(Eu já consultei Problemas no script com espaços no nome de arquivo e Por que não consigo escapar de espaços em um script bash? , mas não parece aperfeiçoar meu script.

Aqui está o meu script. O processo atual é mais complicado, o que reduzo aqui para o comando simples file .

#!/bin/bash

if [ $# -eq 0 ]; then
   echo "Usage is $0 <files to be tested>"
   exit
fi

allfilestobetesed=$@
for filetobetested in "$allfilestobetested"
do
    file "$filetobetested"
done

Como posso melhorar meu script?

    
por Masroor 23.10.2015 / 16:56

3 respostas

4

Você provavelmente deve se livrar da sua variável allfilestobetested se puder:

for filetobetested in "$@"; do
    file "$filetobetested"
done

expandirá corretamente

    
por 23.10.2015 / 17:06
2

Você estava bem perto. Primeiro, você acertou usando $ @ ao invés de $ *.

Você precisa se preocupar com a expansão do shell, portanto, não use " desnecessariamente, como aconteceu na tarefa. Isso removerá os limites entre os tokens. No entanto, você faz precisar de "@_".

Então nós temos:

if [ $# -eq 0 ]; then
   echo "Usage is $0 <files to be tested>"
   exit
fi

for filetobetested in "$@"
do
    file "$filetobetested"
done

Por último, o meu link do debugger bash pode ajudá-lo a seguir coisas como esta. A seção 1.2 do manual do bashdb descreve como definir o PS4 para fornecer mais informações de set -x de rastreio.

    
por 23.10.2015 / 17:14
0

Você não precisa de "$@" :

    for filetobetested
    do
        file "$filetobetested"
    done
    
por 24.10.2015 / 10:37