両方の変数に基づいてファイル名の配列を作成し、次のように中括弧拡張を使用しようとしています。
#!/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が使用されていないようです。
$ 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.
もっと良い方法がありますか?
答え1
解決策は次のとおりです。
#!/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
(そして常に覚えておいてください。変数参照リストコンテキストが不要な場合)