Extraindo arquivo da variável em um arquivo de script

0
SRC=(*.c)



for j in $SRC
do
if test "'echo $j*.c'" != "$j*.c"; then
build.log/_compile -v $j*.c
fi
done

apenas extrai o primeiro arquivo WHY? A idéia era que o loop extraísse e compilasse cada arquivo de forma independente, fornecendo arquivos .o de múltiplas partes.

    
por BARRY96 30.08.2016 / 22:53

1 resposta

5

Observe que o comando echo aqui mostra apenas um arquivo:

$ ls
file1.c  file2.c  file3.c  file4.c
$ src=(*.c)
$ echo $src
file1.c

Se você quiser acessar todos os elementos de uma matriz, use um formulário mais complexo:

$ echo "${src[@]}"
file1.c file2.c file3.c file4.c

Assim, substitua:

for j in $SRC

com:

for j in "${SRC[@]}"

O formulário "${SRC[@]}" é seguro para usar, mesmo que os nomes dos arquivos contenham espaços em branco ou outros caracteres difíceis

Notas adicionais

  1. As melhores práticas são usar nomes de letras maiúsculas ou minúsculas para as variáveis do shell. O sistema usa nomes de maiúsculas para suas variáveis e você não deseja sobrescrever acidentalmente um deles. Portanto, é uma boa prática usar, por exemplo, Src ou src no lugar de SRC .

  2. Como o steeldriver sugere, coloque este comando no começo do seu script:

    shopt -s nullglob
    

    Com o conjunto nulo, a matriz SRC estará vazia se não houver arquivos .c .

por John1024 30.08.2016 / 22:58