Você provavelmente deve se livrar da sua variável allfilestobetested
se puder:
for filetobetested in "$@"; do
file "$filetobetested"
done
expandirá corretamente
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?
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.
Você não precisa de "$@"
:
for filetobetested
do
file "$filetobetested"
done
Tags bash shell-script whitespace