Bash

語法錯誤:在 bash 腳本中使用 regexp_replace 時未終止的帶引號的字元串

  • May 8, 2016

我在我正在使用的 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')"

引用自:https://unix.stackexchange.com/questions/281877