2개의 애셋을 확인해야 합니다.
- 파일 콘텐츠 형식
- 이 콘텐츠를 반복합니다.
따라서 콘텐츠 파일은 다음과 같아야 합니다.
key1=value
key2=value2
...
따라서 각 줄에는 형식이 있어야 합니다 key=value
. 앞이나 뒤에는 공백이 허용되지 않습니다 =
. 이 파일의 내용은 env 형식 파일이어야 합니다.
반면에 루프 내에서 각 행을 a 와 a 로 분할해야 합니다 key
.value
어떤 아이디어가 있나요?
답변1
배시 사용:
n=0
while IFS="=" read -r key value; do
((n++))
if [[ -z $key ]]; then echo "missing key on line $n"; continue; fi
if [[ -z $value ]]; then echo "empty value on line $n"; continue; fi
echo "key:>$key<; value:>$value<"
done <<END
key1=value1
key2=value2
key3=
=value3
foo
key4=value4=value5=value6
END
산출
key:>key1<; value:>value1<
key:>key2<; value:>value2<
empty value on line 3
missing key on line 4
empty value on line 5
missing key on line 6
key:>key4<; value:>value4=value5=value6<
답변2
이 파일을 다음과 같이 지정하십시오 input
.
key1=value1
key2=value2
key3=
=value3
key4=value4
=
필드 구분자 로 사용할 수 있습니다 awk
.
$ awk -F= '!($1 && $2 && NF==2) { print "File failed validation on line " NR; exit 1} { print $1, $2 }' input
key1 value1
key2 value2
File failed validation on line 3
표준 오류에 유효성 검사 오류 메시지를 표시하려면 print
명령문을 수정하고, 오류가 표시된 후 처리를 계속하려면 명령문을 exit
다음과 같이 변경하십시오 next
.
$ awk -F= '!($1 && $2 && NF==2) { print "File failed validation on line " NR | "cat 1>&2"; next } { print $1, $2 }' input
[stdout] key1 value1
[stdout] key2 value2
[stdout] key4 value4
[stderr] File failed validation on line 3
[stderr] File failed validation on line 4
유효성 검사는 세 단계로 수행됩니다. 이러한 조건 중 하나라도 충족되지 않으면 오류가 발생하고 첫 번째 예에서는 오류 상태 종료 코드와 함께 실행이 중단됩니다.
$1
- (입력 사양 용어로) "키"가 있는지 확인하십시오.$2
- (입력 사양 용어로) "값"이 있는지 확인하십시오.NF==2
- 앞서 언급한 "키"와 "값" 필드가 두 개만 있는지 확인하세요.