Bash 抱怨使用反引号时 here-document 中的语法错误
Bash complains about syntax errors in here-document when using backticks
我是运行下面的一段bash代码:
cat << END_TEXT
_ _
| | | |
__ _| |__ ___ __| |
/ _` | '_ \ / __/ _` |
| (_| | |_) | (_| (_| |
\__,_|_.__/ \___\__,_|
END_TEXT
我收到一个错误:
bash: command substitution: line 1: syntax error near unexpected token `|'
bash: command substitution: line 1: ` | '_ \ / __/ _'
这是反引号。此处文档中的大部分内容未按原样解释和使用,但反引号改变了这一点。
解决方案:逃避它们,即使它弄乱了脚本的布局:
cat << END_TEXT
_ _
| | | |
__ _| |__ ___ __| |
/ _\` | '_ \ / __/ _\` |
| (_| | |_) | (_| (_| |
\__,_|_.__/ \___\__,_|
END_TEXT
无需转义反引号。只需使用引用的 here-doc 字符串作为:
cat <<-'END_TEXT'
_ _
| | | |
__ _| |__ ___ __| |
/ _` | '_ \ / __/ _` |
| (_| | |_) | (_| (_| |
\__,_|_.__/ \___\__,_|
END_TEXT
根据man bash
:
If word is unquoted, all lines of the here-document are subjected to parameter expansion, command substitution, and arithmetic expansion, the character sequence \<newline>
is ignored, and \
must be used to quote the characters \
, $
, and `
.
我是运行下面的一段bash代码:
cat << END_TEXT
_ _
| | | |
__ _| |__ ___ __| |
/ _` | '_ \ / __/ _` |
| (_| | |_) | (_| (_| |
\__,_|_.__/ \___\__,_|
END_TEXT
我收到一个错误:
bash: command substitution: line 1: syntax error near unexpected token `|'
bash: command substitution: line 1: ` | '_ \ / __/ _'
这是反引号。此处文档中的大部分内容未按原样解释和使用,但反引号改变了这一点。
解决方案:逃避它们,即使它弄乱了脚本的布局:
cat << END_TEXT
_ _
| | | |
__ _| |__ ___ __| |
/ _\` | '_ \ / __/ _\` |
| (_| | |_) | (_| (_| |
\__,_|_.__/ \___\__,_|
END_TEXT
无需转义反引号。只需使用引用的 here-doc 字符串作为:
cat <<-'END_TEXT'
_ _
| | | |
__ _| |__ ___ __| |
/ _` | '_ \ / __/ _` |
| (_| | |_) | (_| (_| |
\__,_|_.__/ \___\__,_|
END_TEXT
根据man bash
:
If word is unquoted, all lines of the here-document are subjected to parameter expansion, command substitution, and arithmetic expansion, the character sequence
\<newline>
is ignored, and\
must be used to quote the characters\
,$
, and`
.