두 변수를 기반으로 파일 이름 배열을 만들고 다음과 같이 중괄호 확장을 사용하려고 합니다.
#!/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
(그리고 항상 기억하세요.변수 참조목록 컨텍스트가 필요하지 않은 경우)