bash shellcheck问题与括号扩展中的变量

Modified on: Sat, 30 Jun 2018 07:12:00 +0800

我正在尝试创建一个基于两个变量并使用大括号扩展的文件名数组,如下所示:

#!/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似乎未被使用:

#!/bin/bash
altdir=/usr
arg=abc
tries=({.,$altdir}/{$arg,$arg/main}.{tex,ltx,drv,dtx})
for i in "${tries[@]}"; do echo $i; done

有更好的方法吗?

最佳答案

解决方法可以是:

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

或make shellcheck忽略SC2034代码:

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

(如果您不想要列表上下文,请记得始终引用您的变量

作者:Community,cuonglm

相关问答

添加新评论