我正在运行以下一段bash代码:
cat << END_TEXT
_ _
| | | |
__ _| |__ ___ __| |
/ _` | '_ \ / __/ _` |
| (_| | |_) | (_| (_| |
\__,_|_.__/ \___\__,_|
END_TEXT
并且收到错误:
bash: command substitution: line 1: syntax error near unexpected token `|'
bash: command substitution: line 1: ` | '_ \ / __/ _'
答案 0 :(得分:8)
无需逃避反击。只需使用引用的here-doc字符串:
cat <<-'END_TEXT'
_ _
| | | |
__ _| |__ ___ __| |
/ _` | '_ \ / __/ _` |
| (_| | |_) | (_| (_| |
\__,_|_.__/ \___\__,_|
END_TEXT
根据man bash
:
如果word 未加引号,则here-document的所有行都要进行参数扩展,命令替换和算术扩展,忽略字符序列
\<newline>
,{{1必须用于引用字符\
,\
和$
。
答案 1 :(得分:0)
这是反击。 here-document中的大多数内容都不是按字母顺序排列并按原样使用,但反引号会更改此内容。
解决方案:逃避它们,即使它弄乱了你的脚本布局:
cat << END_TEXT
_ _
| | | |
__ _| |__ ___ __| |
/ _\` | '_ \ / __/ _\` |
| (_| | |_) | (_| (_| |
\__,_|_.__/ \___\__,_|
END_TEXT