Bash
語法錯誤:在 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 中執行腳本時會出現此錯誤嗎?
您的線路:
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')"