我經常從命令列使用 beeline,所以我想為 beeline 命令創建一個 bash 別名,它為我處理所有樣板檔案并進行一些引數決議和一些事情。具體來說,我想做的一件事是創建一個showtables命令,該命令采用單個引數,即資料庫名稱,并使用樣板呼叫beeline 命令,并將 -e 引數與適當的 SQL 一起傳遞,即 -showtables db1應該呼叫/usr/bin/beeline -u $config -e "SHOW TABLES IN db1". 我的源檔案如下所示:
/usr/bin/beeline --showHeader=False --outputformat=tsv2 -u $config -e \"SHOW TABLES IN $1\"
但輸出是
...
Error: Error while compiling statement: FAILED: ParseException line 1:4 cannot recognize input near 'SHOW' '<EOF>' '<EOF>' in ddl statement (state=42000,code=40000)
Error: Error while compiling statement: FAILED: ParseException line 1:0 cannot recognize input near 'TABLES' '<EOF>' '<EOF>' (state=42000,code=40000)
Error: Error while compiling statement: FAILED: ParseException line 1:0 cannot recognize input near 'IN' '<EOF>' '<EOF>' (state=42000,code=40000)
Error: Error while compiling statement: FAILED: ParseException line 1:0 cannot recognize input near 'db1' '<EOF>' '<EOF>' (state=42000,code=40000)
...
我已經證實只是在做
/usr/bin/beeline --showHeader=False --outputformat=tsv2 -u $config -e "SHOW TABLES IN db1"
按預期作業。我不明白為什么我的可執行檔案不起作用。
uj5u.com熱心網友回復:
從決議的角度來看,引號之前的反斜杠使它們的行為類似于常規字符,而不再像引號。因此,當你把反斜線在報價前,SHOW TABLES IN db1不再是一個字串,但四個單獨的字串:"SHOW,TABLES,IN,和db1"。
這些詞在單獨運行時不是有效的查詢——因此是你的錯誤。去掉反斜杠,問題就消失了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408119.html
標籤:
上一篇:csv檔案操作:比較兩個csv檔案并回傳所有匹配的行和標題
下一篇:按排序順序將jpg轉換為cbz?
