Shell脚本将新行回显到文件


26

我想在shell脚本中的变量之间回显新行。这是我的代码:

var1 =“ Hello”
var2 =“ World!”
logwrite =“ $ var1 [在这里我要插入新行的地方] $ var2
echo“ $ logwrite” >> / Users /用户名/Desktop/user.txt

现在,当我运行脚本时,文件user.txt显示如下:

你好,世界!

我希望它显示:

你好
世界!

我该怎么做呢??

编辑:这是我的shell脚本:

echo -n“您的名字是什么?”
首先阅读
echo -n“您的姓氏是什么?”
最后阅读
echo -n“您的中间名是什么?”
阅读中间
echo -n“你生日是几岁?”
读生日
echo -e“名字:$ first / n姓氏:$ last / n中间名:$ middle / n生日:$ birthday” >> /Users/matthewdavies/Desktop/user.txt
qlmanage -p“〜/桌面/user.txt”

1
您需要创建此“ logwrite”变量吗?你会写printf "%s\n" $var1 $var2 >> file吗?
glenn jackman 2011年

不,我不需要,在我正在修改的脚本中,我不使用$ logwrite变量。谢谢。
daviesgeek 2011年

Answers:


32
var1="Hello"
var2="World!"
logwrite="$var1\n$var2"
echo -e "$logwrite"  >> /Users/username/Desktop/user.txt

说明:

\n转义序列表示换行。将-e参数传递给echo可以解释转义序列。

它甚至可以进一步简化:

var1="Hello"
var2="World!"
echo -e "$var1\n$var2"  >> /Users/username/Desktop/user.txt

甚至:

echo -e "Hello\nWorld! "  >> /Users/username/Desktop/user.txt

您的示例有效,但是当我将其合并到代码中时,它将无法正常工作。我将编辑我的帖子并在其中添加脚本。
daviesgeek

1
@dave似乎您在转义序列中使用了错误的斜杠。\n而不是/n应该这样做:)
John T

可以解决此问题(使用\ n而不是/ n。非常感谢!
daviesgeek 2011年

@dave非常受欢迎:)
John T

在KSH脚本中的AIX上,我不需要该-e标志。
javaPlease42

5
var1='Hello'
var2='World!'
echo "$var1" >> /Users/username/Desktop/user.txt
echo "$var2" >> /Users/username/Desktop/user.txt

或者实际上您不需要vars:

echo 'Hello' >> /Users/username/Desktop/user.txt
echo 'World!' >> /Users/username/Desktop/user.txt

john t答案有问题:如果任何var具有\ n字符串(或其他序列,如\ t),它们将被翻译。一个人可以获得与printf类似的答案:

printf '%s\n%s\n' 'Hello' 'World!'

也嗯。我看到您正在将答案编入变量$ logwrite。如果这是该变量的唯一用法,则似乎毫无意义。

我认为here-doc可能更具可读性,特别是如果您有很多行要追加到日志中时:

cat >> /Users/username/Desktop/user.txt <<EOF
Hello
World
EOF

(该词EOF是您可以选择的定界符。它可以是任何词)。

请注意,heredoc将扩展$变量,例如双引号。如果您不希望这样做,请引用此文档,例如<<“ EOF”


事情是所有var都没有的\n,因此为什么我提供了答案。“假设”方法将使该站点上的每个问题陷入无休止的讨论。当他走那条路时,他可以问另一个问题:)
约翰·T

@elias $ logwrite变量是在我进行更改时从脚本编辑中遗留下来的。我从代码中删除了$ logwrite var。John T.的回答确实有效。非常感谢!
daviesgeek

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.