스크립팅 - 정의되지 않은 경우 변수 무시

스크립팅 - 정의되지 않은 경우 변수 무시

HP-UX *** B.11.31 U ia64 **** 무제한 사용자 라이센스 안녕하세요,

var1=abc
var2=xyz
touch $var1 $var2 $var3

변수 중 하나가 설정되지 않으면 명령이 실패합니다.

ksh: var3: parameter not set

명령이 설정되지 않은/정의된 변수를 무시하고 정의된 변수에 대한 파일을 생성하도록 하려면 어떻게 해야 합니까? if 루프가 없습니다. 터치 명령 바로 안에 있습니다. 감사해요

답변1

as 또는를 호출하여 옵션을 켜거나 또는 실행하여 옵션을 켜면 -u이 오류 메시지가 나타납니다.kshksh -uksh -o nounsetset -uset -o nounset

$var1 $var2 $var3 터치

이 변수가 파일 모드 목록을 포함하도록 의도되지 않은 한 이것은 어쨌든 잘못된 것입니다.

다음과 같았어야 합니다.

touch -- "$var1" "$var2" "$var3"

이제 그 중 하나가 null이 되도록 허용하고 touch이 경우 null 매개변수로 전달하지 않으려면(그리고 문제를 해결하려면 set -u) 다음과 같이 작성할 수 있습니다.

touch -- ${var1:+"$var1"} ${var2:+"$var2"} ${var3:+"$var3"}

또 다른 옵션은 다음을 수행하는 것입니다.

(IFS=; set -f +u; touch -- $var1 $var2 $var3)

사용하여 IFS=비활성화합니다.분사, 와일드카드를 사용 set -f하지만 변수를 인용 해제하는 세 번째 부작용에 의존합니다.빈 제거. (또한 서브셸에서만 이 nounset모든 기능을 비활성화했습니다 .)set +u

답변2

한 줄만 할 수 있는지 의심 스럽습니다. 다음과 같이 시도해 볼 수도 있습니다.

validate_touch()
{
for value in "$@"
do
if [ ! -z "$value" ]; then touch $value;fi
done
}
validate_touch new

관련 정보