web-dev-qa-db-ja.com

ブレース展開の変数に関するbashシェルチェックの問題

次のように、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.

これを行うためのより良い方法はありますか?

7
Wybo Dekker

回避策は次のとおりです。

#!/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

または、shellcheckSC2034コードを無視させます。

shellcheck -e SC2034 testscript

(そして、リストコンテキストが必要ない場合は常に 変数を引用 を忘れないでください)

5
cuonglm