HP-UX *** B.11.31 U ia64 **** 무제한 사용자 라이센스 안녕하세요,
var1=abc
var2=xyz
touch $var1 $var2 $var3
변수 중 하나가 설정되지 않으면 명령이 실패합니다.
ksh: var3: parameter not set
명령이 설정되지 않은/정의된 변수를 무시하고 정의된 변수에 대한 파일을 생성하도록 하려면 어떻게 해야 합니까? if 루프가 없습니다. 터치 명령 바로 안에 있습니다. 감사해요
답변1
as 또는를 호출하여 옵션을 켜거나 또는 실행하여 옵션을 켜면 -u
이 오류 메시지가 나타납니다.ksh
ksh -u
ksh -o nounset
set -u
set -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