将换行符添加到unix shell变量中

时间:2012-02-22 21:04:05

标签: linux bash shell unix scripting

我是shell脚本新手。我在shell脚本中有一个变量,我想在其中格式化数据。变量在循环的每次迭代期间存储新数据。每次存储新数据时,我都想插入一个新的行字符。以下是我试图将数据存储到变量中的方法。

VARIABLE="$VARIABLE '\n' SomeData"

不幸的是,输出包括文字'\n'任何帮助都会受到赞赏。提前谢谢。

8 个答案:

答案 0 :(得分:56)

尝试$'\n'

VAR=a
VAR="$VAR"$'\n'b
echo "$VAR"

给了我

a
b

答案 1 :(得分:21)

一种常见的技术是:

nl='
'
VARIABLE="PreviousData"
VARIABLE="$VARIABLE${nl}SomeData"

echo "$VARIABLE"
PreviousData
SomeData

同样常见的是,为了防止无意中让你的字符串以换行符开头:

VARIABLE="$VARIABLE${VARIABLE:+$nl}SomeData"

(当且仅当VARIABLE设置且非空时,表达式${VARIABLE:+$nl}将扩展为换行符。)

答案 2 :(得分:5)

VAR="one"
VAR="$VAR.\n.two"
echo -e $VAR

输出:

  

之一。   
  。二

答案 3 :(得分:3)

除了$'\n'之外,你也可以使用printf

VARIABLE="Foo Bar"
VARIABLE=$(printf "${VARIABLE}\nSomeData")
echo "$VARIABLE"

<强>输出:

Foo Bar
SomeData

答案 4 :(得分:1)

我遇到了所有其他解决方案的问题:当使用#后跟SPACE时(在Markdown中写入时非常常见),两者都会被拆分为新行。

所以,另一种方法是使用单引号,以便&#34; \ n&#34;得到渲染。

FOO=$'# Markdown Title #\n'
BAR=$'Be *brave* and **bold**.'
FOOBAR="$FOO$BAR"

echo "$FOOBAR"

<强>输出:

# Markdown Title #
Be *brave* and **bold**.

答案 5 :(得分:1)

  

单引号这些引号之间的所有特殊字符都会丢失   特殊含义。
https://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm

因此,您使用的语法会使您想要达到的目标不同。

这就是你需要的:

  

$&#39; \ X&#39; construct使echo中的-e选项变得不必要。   
https://linux.die.net/abs-guide/escapingsection.html

echo -e "something\nsomething"

echo "something"$'\n'"something"

答案 6 :(得分:1)

这比你想象的要简单得多:

VARIABLE="$VARIABLE
SomeData"

答案 7 :(得分:0)

在前两个解决方案的基础上,我将如下所示。使用&#39; + =&#39;连接字符串操作员,不知为何看起来更清楚。

同样记得使用printf而不是echo,你会省去很多麻烦

sometext="This is the first line"
sometext+=$'\n\n'
sometext+="This is the second line AFTER the inserted new lines"
printf '%s' "${sometext}"

输出:

  

这是第一行

     

这是插入新行之后的第三行