Function

函式內部縮進的Heredocument在執行時失敗

  • December 3, 2017

我有一個包含函式和函式呼叫的腳本。在函式內部有一個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

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