Function
函式內部縮進的Heredocument在執行時失敗
我有一個包含函式和函式呼叫的腳本。在函式內部有一個heredocument:
#!/bin/bash DWA() { ...... mysql -u root -p <<-MYSQL ...... MYSQL } DWA
問題
執行因有關 heredocument 分隔符的錯誤而中斷(可能是由於分隔符
MYSQL
被縮進)。當我刪除所有潛在客戶(空格/製表符)時,問題沒有發生。
我的問題
給定函式剝離所有前導選項卡(我不知道其他類型的前導,如空格),為什麼我會遇到這個問題,如果有的話,可以做些什麼來解決這個問題?
你可能沒有用標籤縮進你的heredoc。heredoc 的每一行都必須使用製表符縮進,包括第一行(引入分隔符的地方)。這是一個測試案例:
echo -e 'function heredoc() {\n\tcat <<-HEREDOC\n\t\tThis is a test\tHEREDOC\n} heredoc' > heredoc.sh
嘗試執行該命令,然後執行
heredoc.sh
. 您應該得到以下輸出:This is a test.
或者,這是相同的腳本,但第一行用空格而不是製表符縮進:
echo -e 'function heredoc() {\n cat <<-HEREDOC\n\t\tThis is a test\tHEREDOC\n} heredoc' > heredoc2.sh
如果我們執行
heredoc2.sh
,我們會得到以下錯誤輸出:bash heredoc2.sh heredoc2.sh: line 4: warning: here-document at line 2 delimited by end-of-file (wanted `HEREDOC') heredoc2.sh: line 5: syntax error: unexpected end of file