반응형
mysql 출력을 bash 변수로 구문 분석하면 공백으로 인해 깨집니다.
테이블의 모든 행을 읽고 개별 변수에 bash로 넣으려고 하는데 셀 항목에 공백이 있는 경우 문제가 발생합니다.
while read id name neighbourhood city
do
echo "ID: $id"
echo "name: $name"
echo "neighbourhood: $neighbourhood"
echo "city: $city"
echo -e "\n"
done < <(echo "SELECT id, name, neighbourhood_id, city_id FROM households" | mysql -u kong -pHarald city_planner -h 0)
만약에name
하나의 단어일 뿐 모든 것이 괜찮아 보이지만 공백으로 구분된 세 개의 개별 단어가 있으면 다음과 같이 됩니다.
...
ID: 200
name: Durek
neighbourhood: 1
city: 2
ID: 201
name: Kong
neighbourhood: Harald
city: Rex 1 2
...
어떻게 하면 전체 이름이 이름 변수에 들어가게 만들 수 있습니까?
공백이 있는 문자열을 하나만 가지고 있다면 마지막 위치에 놓을 수 있습니다.
root@localhost:~# while read id neighbourhood city name
> do
> echo "ID: $id"
> echo "name: $name"
> echo "neighbourhood: $neighbourhood"
> echo "city: $city"
> echo -e "\n"
> done < <(echo "SELECT id, neighbourhood_id, city_id, name FROM households" | mysql -u root Bernd -N)
ID: 200
name: Durek
neighbourhood: 1
city: 2
ID: 201
name: Kong Harald Rex
neighbourhood: 1
city: 2
root@localhost:~#
저는 다음과 같이 "CONCAT"를 먼저 사용하고 "IFS"를 사용하는 것을 제안합니다.
while IFS='@' read -r id name neighbourhood city
do
echo "ID: $id"
echo "name: $name"
echo "neighbourhood: $neighbourhood"
echo "city: $city"
echo -e "\n"
done < <( mysql -u kong -pHarald city_planner -h 0 -NBe "SELECT CONCAT(id, '@', name, '@', neighbourhood_id, '@', city_id ) FROM households")
언급URL : https://stackoverflow.com/questions/60375798/parsing-mysql-output-into-bash-variables-is-broken-by-white-spaces
반응형
'itsource' 카테고리의 다른 글
MariaDB 10.0은 덤프 삽입 시 외부 키 이름을 바꿉니다. (0) | 2023.10.09 |
---|---|
java.time을 serializing하는 Spring boot 문제가 발생했습니다.ISO-8601 JSON 타임스탬프를 반환하는 LocalDateTime with Jackson? (0) | 2023.10.09 |
Sequel Pro?(GUI 기반 sql navigator)를 대체하는 Linux (0) | 2023.10.09 |
사이프러스를 사용하여 드롭다운 목록 항목 선택 (0) | 2023.10.09 |
디브를 용기 바닥에 띄우려면 어떻게 해야 합니까? (0) | 2023.10.09 |