Bash
bash shellcheck 與大括號擴展中的變數有關的問題
我正在嘗試基於兩個變數並使用大括號擴展創建一個文件名數組,如下所示:
#!/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
(如果您不想要列表上下文,請記住始終引用您的變數)