중괄호 확장의 변수와 관련된 bash shellcheck 문제

중괄호 확장의 변수와 관련된 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.

더 좋은 방법이 있나요?

답변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

(그리고 항상 기억하세요.변수 참조목록 컨텍스트가 필요하지 않은 경우)

관련 정보