![중괄호 확장의 변수와 관련된 bash shellcheck 문제](https://linux55.com/image/73083/%EC%A4%91%EA%B4%84%ED%98%B8%20%ED%99%95%EC%9E%A5%EC%9D%98%20%EB%B3%80%EC%88%98%EC%99%80%20%EA%B4%80%EB%A0%A8%EB%90%9C%20bash%20shellcheck%20%EB%AC%B8%EC%A0%9C.png)
두 변수를 기반으로 파일 이름 배열을 만들고 다음과 같이 중괄호 확장을 사용하려고 합니다.
#!/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
(그리고 항상 기억하세요.변수 참조목록 컨텍스트가 필요하지 않은 경우)