首页 > 解决方案 > Bash:如何存储在变量中显示带有 \n 的变量的命令

问题描述

描述问题的最简单方法是演示它。

目标是存储一个命令,该命令在执行时会正确显示变量 CONTENT 的内容,包括换行符。

如果我们要添加-x到 中#!,很明显在执行\n期间的插值过程中会被吞下,$display_cmd即使它似乎被正确分配。这反过来意味着使用printf而不是echo具有相同的结果。

我有一个使用 cat 和 HERE doc 的解决方法,但我强烈不希望使用它。原因是使用 HERE doc 时,EOF 标记需要从第一列开始,在某些时候,有人会决定与打破解决方法的其余代码保持一致。

这里有一种方法可以在不使用 HERE 文档的情况下完成我想要的事情吗?

#!/bin/bash 

CONTENT=$(cat << EOF
Untrusted first line
Untrusted second line
EOF
)

# This will work

echo "CONTENT variable will print on two different lines"
echo

echo -e "$CONTENT"

# This won't work
# Create a command

echo "And this will display content on a single line:"
echo 

display_cmd="echo -e \"${CONTENT}\""

$display_cmd

标签: bashvariablesnewline

解决方案


推荐阅读