Shell 脚本将新行回显到文件

dav*_*eek 29 shell shell-script echo

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

var1="你好"
var2="世界!"
logwrite="$var1 [这里是我想插入新行的地方] $var2
echo "$logwrite" >> /Users/username/Desktop/user.txt

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

你好,世界!

我希望它显示:

你好
世界!

我该怎么做呢??

编辑:这是我的 shell 脚本:

echo -n “你叫什么名字?”
先读
echo -n "你姓什么?"
最后阅读
echo -n “你的中间名是什么?”
读中间
echo -n “你的生日是几号?”
读生日
echo -e "名字: $first /nLast Name: $last /nMiddle Name: $middle /nBirthday: $birthday" >> /Users/matthewdavies/Desktop/user.txt
qlmanage -p "~/Desktop/user.txt"

Joh*_*n T 41

var1="Hello"
var2="World!"
logwrite="$var1\n$var2"
echo -e "$logwrite"  >> /Users/username/Desktop/user.txt
Run Code Online (Sandbox Code Playgroud)

解释:

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

甚至可以进一步简化:

var1="Hello"
var2="World!"
echo -e "$var1\n$var2"  >> /Users/username/Desktop/user.txt
Run Code Online (Sandbox Code Playgroud)

甚至:

echo -e "Hello\nWorld! "  >> /Users/username/Desktop/user.txt
Run Code Online (Sandbox Code Playgroud)


小智 5

var1='Hello'
var2='World!'
echo "$var1" >> /Users/username/Desktop/user.txt
echo "$var2" >> /Users/username/Desktop/user.txt
Run Code Online (Sandbox Code Playgroud)

或者实际上你不需要 vars:

echo 'Hello' >> /Users/username/Desktop/user.txt
echo 'World!' >> /Users/username/Desktop/user.txt
Run Code Online (Sandbox Code Playgroud)

john t 的回答有一个问题:如果任何 vars 有 \n 字符串(或其他一些像 \t 这样的序列),它们将被翻译。人们可以用 printf 得到类似于他的答案:

printf '%s\n%s\n' 'Hello' 'World!'
Run Code Online (Sandbox Code Playgroud)

还有嗯。我看到您正在将答案组合到变量 $logwrite 中。如果这是该变量的唯一用途,则似乎毫无意义。

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

cat >> /Users/username/Desktop/user.txt <<EOF
Hello
World
EOF
Run Code Online (Sandbox Code Playgroud)

(这个词,EOF,是一个你可以选择的分隔符。它可以是任何词)。

请注意,heredoc 会扩展 $variables,如双引号。如果你不想要这个,你引用heredoc,比如<<“EOF”