Ich versuche, ein Array von Dateinamen zu erstellen, das auf zwei Variablen basiert und die Klammererweiterung wie folgt verwendet:
#!/bin/bash
altdir=/usr
arg=abc
tries=({.,$altdir}/{$arg,$arg/main}.{tex,ltx,drv,dtx})
for i in "${tries[@]}"; do echo $i; done
In der letzten Anweisung werden die gewünschten Dateien korrekt aufgelistet:
./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
Aber Shellcheck sagt mir, dass die beiden Variablen altdir und arg nicht verwendet zu werden scheinen:
$ 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.
Gibt es einen besseren Weg, dies zu tun?
bash
shell
brace-expansion
shellcheck
Wybo Dekker
quelle
quelle
Antworten:
Eine Problemumgehung kann sein:
oder machen Sie
shellcheck
IgnoriercodeSC2034
:(Und denken Sie daran, Ihre Variablen immer in Anführungszeichen zu setzen, wenn Sie keinen Listenkontext wünschen.)
quelle