回声环境变量,保持换行符不变?

33 浏览
0 Comments

回声环境变量,保持换行符不变?

我想为一些模板创建一些脚本,并将它们插入到我的项目文件夹中。我想使用一个shell脚本来实现这个目标,并且这些模板非常小,所以我想将它们嵌入到shell脚本中。问题是,echo似乎忽略了字符串中的换行符。要么是这样,要么字符串本身就没有换行符。下面是一个例子:\n

MY_STRING="
Hello, world! This
Is
A
Multi lined
String."
echo -e $MY_STRING

\n这将输出:\n

Hello, world! This Is A Multi lined String.

\n我猜想echo是罪魁祸首。如何让它识别换行符呢?

0
0 Comments

从上面的代码中,我们可以看到一个问题:在使用echo命令打印一个环境变量$MY_STRING时,输出结果并没有保留原始字符串中的换行符。这可能导致一些文本格式混乱的问题。

这个问题的原因是echo命令在处理输出时会自动移除字符串中的换行符。这可能是为了确保打印的内容在一行内显示,但这也意味着我们无法保留原始字符串中的换行格式。

为了解决这个问题,我们可以使用printf命令来代替echo命令。printf命令允许我们使用格式化字符串来控制输出的格式。具体的解决方法如下:

printf "%s\n" "$MY_STRING"

在这个命令中,我们使用了%s\n作为格式化字符串。%s表示输出一个字符串,而\n表示插入一个换行符。这样,我们就可以保留原始字符串中的换行符,并将其打印出来。

通过使用printf命令,我们可以确保环境变量$MY_STRING在输出时保持换行符的完整。这样,我们可以正确地处理和显示包含换行符的字符串内容。

0
0 Comments

问题:如何在环境变量中回显并保留换行符?

原因:在使用echo命令时,存在一些问题,如不同版本的echo命令可能会有不同的行为,以及无法完全控制输出的格式等。因此,需要一种更好的方法来回显环境变量并保留换行符。

解决方法:使用printf命令可以解决这个问题。printf命令是一个POSIX标准的命令,具有更多的灵活性和控制能力。可以使用以下命令来回显环境变量并保留换行符:

printf '%s\n' "$MY_STRING"

printf命令可以在任何Shell中使用,但不同的Shell可能实现方式不同。在bash中,printf命令是一个内置命令,因此可以直接在bash中使用。

0
0 Comments

问题出现的原因是在环境变量插值周围缺少双引号。解决方法是在插值周围加上双引号。

当解析命令行时,shell会对空白字符进行规范化。如果在命令行中编写一个简单的C程序来打印出其argv数组,可以看到这一点。

与之相反,使用引号引用的话,整个字符串都在argv[0]中,包括换行符。

另外,也可以使用here documents(使用cat而不是echo)来处理这个问题。可以在here document中插入一个变量。

希望这些修改能有所帮助。

echo -e "$MY_STRING"

argv[0]='Hello,'
argv[1]='world!'
argv[2]='This'
argv[3]='Is'
argv[4]='A'
argv[5]='Multi'
argv[6]='lined'
argv[7]='String.'

cat <<"HERE"
foo
Bar
HERE

cat <<HERE
$MY_STRING
HERE

0