구문 오류: bash 스크립트에서 regexp_replace를 사용할 때 종료되지 않은 인용 문자열

구문 오류: bash 스크립트에서 regexp_replace를 사용할 때 종료되지 않은 인용 문자열

사용 중인 bash 스크립트 끝에 일부 코드를 추가했습니다. 여기에 표시된 코드는 csv를 내 postgres 테이블에 복사한 다음 test_table의 헤더 열에서 대괄호, 따옴표 및 큰 따옴표를 제거하도록 설계되었습니다.

 #copy csv to table

psql -U postgres -d ebay_sold -c "COPY test_table (item_number,title,url,price) FROM '/home/perl_experiments/xmlcsv.txt' (DELIMITER('|'))"

#Remove brackets, then double qotes, then single quotes from title column
    psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '[()]', '', 'g')"
    psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '"', '', 'g')"
    psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '''', '', 'g')"

Postgres 테이블에 복사하면 정상적으로 작동합니다. 대괄호, 큰따옴표 및 작은따옴표 제거는 postgres에서 수동으로 적용할 때 예상대로 작동합니다. 그러나 bash 스크립트를 실행하면 다음과 같은 결과가 나타납니다.

line 27: syntax error: unterminated quoted string

내가 받고있는 오류는 라인과 관련이 있습니다

           psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '"', '', 'g')"

내가 말했듯이 이 명령은 postgres에 로그인한 동안 수동으로 실행하면 잘 작동합니다. bash에서 스크립트를 실행할 때 이 오류가 발생하는 이유를 아는 사람이 있습니까?

답변1

귀하의 라인:

psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '"', '', 'g')"

문제입니다. 큰따옴표로 묶인 문자열을 열었 "UPDATE지만 생각보다 일찍 닫혀 다음 명령을 SQL로 실행하려고 했습니다.

UPDATE test_table SET title = regexp_replace(title, '

이는 명백히 무효입니다. 백슬래시를 사용하여 큰따옴표를 이스케이프해야 합니다.

psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '\"', '', 'g')"

관련 정보