problema shellcheck bash com variáveis na expansão de contraventamento

7

Estou tentando criar uma matriz de nomes de arquivos, com base em duas variáveis e usando a expansão de chaves, assim:

#!/bin/bash
altdir=/usr
arg=abc
tries=({.,$altdir}/{$arg,$arg/main}.{tex,ltx,drv,dtx})
for i in "${tries[@]}"; do echo $i; done

A última declaração lista os arquivos que eu quero corretamente:

./abc.tex
./abc.ltx
./abc.drv
./abc.dtx
./abc/main.tex
./abc/main.ltx
./abc/main.drv
./abc/main.dtx
/usr/abc.tex
/usr/abc.ltx
/usr/abc.drv
/usr/abc.dtx
/usr/abc/main.tex
/usr/abc/main.ltx
/usr/abc/main.drv
/usr/abc/main.dtx

Mas o shellcheck me diz que as duas variáveis, altdir e arg, parecem não ser usadas:

$ shellcheck testscript

In testscript line 3:
    altdir=/usr
    ^-- SC2034: altdir appears unused. Verify it or export it.

In testscript line 4:
    arg=abc
    ^-- SC2034: arg appears unused. Verify it or export it.

Existe uma maneira melhor de fazer isso?

    
por Wybo Dekker 16.09.2015 / 17:01

1 resposta

5

Uma solução alternativa pode ser:

#!/bin/bash

unset altdir
unset arg

: "${altdir:=/usr}"
: "${arg:=abc}"

tries=({.,"$altdir"}/{"$arg","$arg"/main}.{tex,ltx,drv,dtx})
for i in "${tries[@]}"; do echo "$i"; done

ou crie shellcheck ignore SC2034 code:

shellcheck -e SC2034 testscript

(E lembre-se de sempre citar suas variáveis se você não quiser o contexto da lista)

    
por 16.09.2015 / 17:50