尝试在Bash中嵌入变量中的换行符。

18 浏览
0 Comments

尝试在Bash中嵌入变量中的换行符。

我有一个变量var="a b c",我想要最后一个echo输出:

a

b

c

请注意,我希望变量p包含换行符。我该如何做到这一点?

0
0 Comments

在Bash中,如果想要在一个变量中插入换行符,可以使用以下解决方案:

问题出现的原因是,如果不使用双引号将变量的值括起来,在插值时,Shell会根据空格将值拆分成多个部分,将每个换行符处理为一个空格,并且还会扩展通配符。因此,需要使用双引号来确保变量的插值正常。

解决方法是,在插值时使用双引号将变量括起来,如下所示:

echo "$p"

通常情况下,应该在所有的变量插值处使用双引号,除非特别需要上述描述的行为。

关于正确引用的更多内容,请参考[stackoverflow.com/questions/10067266/…](http://stackoverflow.com/questions/10067266)。

如果在macOS Catalina上无法正常工作,即echo打印出来的所有内容都在一行上,这是由于引号的问题,而不是赋值的问题。在插值时,需要使用echo "$p",而不是echo $p。(在zsh中,甚至不需要引号。并且可能永远都不要使用echo -e,最好使用printf来代替基本的echo。)

0
0 Comments

在Bash中嵌入换行符的问题是因为在默认情况下,Shell会将换行符解释为参数分隔符,导致输出时换行符被替换为空格。为了保留换行符,需要正确引用变量的使用。

解决方法是使用echo $'a\nb'。如果要将其存储在变量中并保留换行符进行使用,则需要正确地引用变量的使用。例如:

var=$'a\nb\nc'
echo "$var"

。此外,还可以修改示例程序:

var="a b c"
for i in $var; do
    p="`echo -e "$p\\n$i"`"
done
echo "$p"

需要注意的是,$'variable'语法非常方便,但不一定在其他Shell中可移植。

为什么我们需要转义\n?这取决于你指的是哪个转义符。如果指的是最后的echo "$p",那是因为Shell会将换行符解释为简单的参数分隔符,将abc作为三个不同的参数传递给echo,并且echo会用空格将它们连接起来。当你引用$p时,它的确切内容将作为一个单一的参数传递。

使用info echo可以查看所有可能的转义字符,例如var=$'\n'。感谢建议!

在反引号中使用echo -e是过于复杂的。如果变量中有一个换行符nl=$'\n',你可以直接插入它p=$p$nl$i,或者更简单地在变量中直接放置一个字面上的换行符。

0
0 Comments

问题:如何在Bash中将换行符嵌入变量中?

在Bash中,有几种方法可以将换行符嵌入到变量中。以下是三种常见的方法:

1. 在源代码中插入换行符:

var="a b c"
for i in $var
do
    p="$p\n$i"       # 在源代码中直接插入换行符
done
echo "$p" # 需要使用双引号

2. 使用`$'\n'`(仅适用于Bash和Z shell):

var="a b c"
for i in $var
do
    p="$p"$'\n'"$i"
done
echo "$p" # 需要使用双引号

3. 使用`echo -e`将`\n`转换为换行符:

p="${var1}\n${var2}"
echo -e "$p"

这些方法可以将换行符嵌入到变量中,并以正确的格式输出。但是需要注意的是,使用`\n`在字符串中仅表示两个字符,并不会真正插入换行符。要输出包含真正换行符的字符串,可以使用`echo -e`命令。

以上是解决Bash中将换行符嵌入变量的问题的常用方法。每种方法都有其适用的场景,选择合适的方法取决于具体的需求。

0