Bash

bash shellcheck 與大括號擴展中的變數有關的問題

  • September 16, 2015

我正在嘗試基於兩個變數並使用大括號擴展創建一個文件名數組,如下所示:

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

有一個更好的方法嗎?

解決方法可以是:

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

(如果您不想要列表上下文,請記住始終引用您的變數)

引用自:https://unix.stackexchange.com/questions/230087