저는 배쉬를 처음 접했습니다.
텍스트 조회에서 데이터를 읽고 일부 변수를 선언하는 스크립트를 작성하려고 합니다. 아래 예에서는 아래와 같이 탭으로 구분된 파일 "ab.txt"를 읽습니다.
a->AA
b->BB
여기서 ->는 탭을 의미합니다.
이 데이터를 읽으려면 다음 코드를 사용하고 있습니다.
#!/bin/bash
while read line
do
tmp=(${line///})
fieldName=${tmp[0]}
case $fieldName in
"a")
a=${tmp[1]}
;;
"b")
b=${tmp[1]}
;;
esac
done < "ab.txt"
echo "a:"
echo $a
echo "b:"
echo $b
echo "concat a,b"
echo $a$b
echo "concat b,a"
echo $b$a
이렇게 하면 "a"와 "b"는 괜찮지만 a와 b를 연결하지는 않습니다! 출력은 다음과 같습니다:
a:
AA
b:
BB
concat a,b
BB
concat b,a
AA
내가 뭘 잘못했나요?
답변1
@steedriver가 문제를 발견했습니다. Windows에서는 줄 끝에 이스케이프 문자가 있지만 Linux에서는 그렇지 않습니다. Windows에서 입력 텍스트 파일 ab.txt를 만들었으므로 Linux는 추가 문자를 a,b 변수로 읽습니다. 내 솔루션은 dos2unix를 사용하여 ab.text를 변환하는 것이었고 이것이 작동했습니다.