次のように、2つの変数に基づいて、中括弧の展開を使用して、ファイル名の配列を作成しようとしています。
#!/bin/bash
altdir=/usr
arg=abc
tries=({.,$altdir}/{$arg,$arg/main}.{tex,ltx,drv,dtx})
for i in "${tries[@]}"; do echo $i; done
最後のステートメントは、私が正しく必要なファイルをリストしています。
./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
しかし、shellcheckは、altdirとargの2つの変数が未使用のように見えることを教えてくれます。
$ 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.
これを行うためのより良い方法はありますか?
回避策は次のとおりです。
#!/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
または、shellcheck
にSC2034
コードを無視させます。
shellcheck -e SC2034 testscript
(そして、リストコンテキストが必要ない場合は常に 変数を引用 を忘れないでください)