for 루프에서 설정되지 않은 변수 테스트

for 루프에서 설정되지 않은 변수 테스트

나는 파일을 구문 분석하고 파일 내의 고정 너비에 따라 변수를 설정하는 스크립트를 작성했습니다.

그런 다음 각 변수를 확인하고 빈 필드인 경우 "0"으로 설정하고 싶습니다. 이것의 간단한 변형은 다음과 같습니다:

one=1  
two=""  
three=3  
four=""  

for num in $one $two $three $four  
do  
   echo num is $num  
done

나에게 다음과 같은 결과를 제공합니다.

num is 1   
num is 3

내가 하고 싶은 것은 if $two is null then two=0.

어떻게 해야 합니까?

답변1

-z 비교 연산자를 원합니다 http://tldp.org/LDP/abs/html/comparison-ops.html

if [ -z $two ]; then   ## or [ -z $num ] to test them all 
    two=0
fi
echo "num is $num"

답변2

귀하의 질문은 그다지 의미가 없습니다. 우선 말씀드리자면

one=1
two=""
three=3
four=""

for num in $one $two $three $four
do

그러면 그 for진술은 다음과 같이 해석됩니다.

for num in 1  3

따라서 및 와 num동일한 두 번의 반복만 있습니다 . , (null) 및 (null) 과 동일하게 4번의 반복을 수행하려면 다음과 같이 말해야 합니다.13num13

for num in "$one" "$two" "$three" "$four"

타당한 이유가 없고 자신이 무엇을 하고 있는지 확실히 알고 있지 않는 한 쉘 변수 참조를 인용해야 합니다.

그래서,

for num in "$one" "$two" "$three" "$four"
do
    echo "num is $num"
done

결과는 다음과 같습니다

num is 1
num is 
num is 3
num is 

1이제 결과를 , 0, 3, 로 표현하려면 0간단히 말하면 됩니다.

for num in "$one" "$two" "$three" "$four"
do
    if [ "$num" = "" ]
    then
        num=0
    fi
    echo "num is $num"
done

참고하세요

  • 앞뒤에 공백이 있어야 합니다 [.
  • 앞뒤에 공백이 있어야 합니다 =.
  • ] 앞에 공백이 있어야 하며(뒤에 다른 것이 있으면 뒤에도) 공백이 있어야 합니다 .
  • fi거꾸로 쓰여 있습니다 if.

그러나 귀하의 질문 제목에는 "설정되지 않은 변수"가 언급되어 있습니다.  two그리고 four세트빈 문자열로; fivesix(및 orange, pumpkin, tiger및 기타 잠재적인 변수 이름의 준무한 목록)은 다음과 같습니다.설정되지 않음. 차이가 있습니다. 만약에저것당신이 관심을 갖고 있는 것이면 다른 질문을 해야 합니다.

for num in "$one" "$two" "$three" "$four" "$five" "$six" "$orange" "$pumpkin" "$tiger"
do

five그러면 , six, orange, pumpkintiger, 반복을 twofour반복 과 구별하는 것이 불가능합니다. num7가지 경우 모두 빈 문자열로 설정됩니다. $four및 (등) 변수를 직접 테스트해야 합니다 $five.

PS 새로운 질문을 하지 마세요. 검색을 해보세요. 이것은 이전에 답변되었습니다.

관련 정보