나는 파일을 구문 분석하고 파일 내의 고정 너비에 따라 변수를 설정하는 스크립트를 작성했습니다.
그런 다음 각 변수를 확인하고 빈 필드인 경우 "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번의 반복을 수행하려면 다음과 같이 말해야 합니다.1
3
num
1
3
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
는세트빈 문자열로;
five
및 six
(및 orange
, pumpkin
, tiger
및 기타 잠재적인 변수 이름의 준무한 목록)은 다음과 같습니다.설정되지 않음. 차이가 있습니다. 만약에저것당신이 관심을 갖고 있는 것이면 다른 질문을 해야 합니다.
for num in "$one" "$two" "$three" "$four" "$five" "$six" "$orange" "$pumpkin" "$tiger"
do
︙
five
그러면 , six
, orange
,
pumpkin
및 tiger
, 반복을 two
및 four
반복 과 구별하는 것이 불가능합니다. num
7가지 경우 모두 빈 문자열로 설정됩니다. $four
및 (등) 변수를 직접 테스트해야 합니다 $five
.
PS 새로운 질문을 하지 마세요. 검색을 해보세요. 이것은 이전에 답변되었습니다.