在 bash 函数中使用 cat 打印多行时继承缩进
Inherit indentation when using cat in bash function to print multiple lines
在执行 cat <<
的过程中,如果我们调用也使用 cat <<
的 bash 函数,缩进仅在第一行继承。
使用简单的示例脚本可以更好地解释这一点:
#!/bin/bash
write_multiple_lines() {
cat <<_EOF_
<h1>Header</h1>
<p>Paragraph</p>
_EOF_
return
}
cat << _EOF_
<html>
$(write_multiple_lines)
</html>
_EOF_
结果如下(<p>
没有按照<h1>
的缩进)
<html>
<h1>Header</h1>
<p>Paragraph</p>
</html>
而期望的结果是
<html>
<h1>Header</h1>
<p>Paragraph</p>
</html>
我原以为如果使用 cat <<
,缩进会被继承。对此是否有任何解决方法(除了@bob dylan 在评论中指出的手动向后续行添加缩进之外)?
'preserve' 的唯一方法是更改您的输入文件。 <p>
缩进的原因是因为你在这里缩进了它:
$(write_multiple_lines)
因为您不想更改输入,例如
write_multiple_lines() {
cat <<_EOF_
<h1>Header</h1>
<p>Paragraph</p>
_EOF_
return
}
您可以将其更改为为您回显空格,然后打印每一行,例如
#!/bin/bash
write_multiple_lines() {
while read p; do
echo " " "$p"
done <<_EOF_
<h1>Header</h1>
<p>Paragraph</p>
_EOF_
return
}
cat << _EOF_
<html>
$(write_multiple_lines)
</html>
_EOF_
输出:
<html>
<h1>Header</h1>
<p>Paragraph</p>
</html>
虽然这不太动态/明显,但如果你逐字格式化,所以在做这样的事情之前我会坚持我最初的建议。
在执行 cat <<
的过程中,如果我们调用也使用 cat <<
的 bash 函数,缩进仅在第一行继承。
使用简单的示例脚本可以更好地解释这一点:
#!/bin/bash
write_multiple_lines() {
cat <<_EOF_
<h1>Header</h1>
<p>Paragraph</p>
_EOF_
return
}
cat << _EOF_
<html>
$(write_multiple_lines)
</html>
_EOF_
结果如下(<p>
没有按照<h1>
的缩进)
<html>
<h1>Header</h1>
<p>Paragraph</p>
</html>
而期望的结果是
<html>
<h1>Header</h1>
<p>Paragraph</p>
</html>
我原以为如果使用 cat <<
,缩进会被继承。对此是否有任何解决方法(除了@bob dylan 在评论中指出的手动向后续行添加缩进之外)?
'preserve' 的唯一方法是更改您的输入文件。 <p>
缩进的原因是因为你在这里缩进了它:
$(write_multiple_lines)
因为您不想更改输入,例如
write_multiple_lines() {
cat <<_EOF_
<h1>Header</h1>
<p>Paragraph</p>
_EOF_
return
}
您可以将其更改为为您回显空格,然后打印每一行,例如
#!/bin/bash
write_multiple_lines() {
while read p; do
echo " " "$p"
done <<_EOF_
<h1>Header</h1>
<p>Paragraph</p>
_EOF_
return
}
cat << _EOF_
<html>
$(write_multiple_lines)
</html>
_EOF_
输出:
<html>
<h1>Header</h1>
<p>Paragraph</p>
</html>
虽然这不太动态/明显,但如果你逐字格式化,所以在做这样的事情之前我会坚持我最初的建议。