23

Я хочу отобразить новую строку в файле между переменными в сценарии оболочки. Вот мой код:

var1="Hello"
var2="World!"
logwrite="$var1 [Here's where I want to insert a new line] $var2
echo "$logwrite"  >> /Users/username/Desktop/user.txt

Прямо сейчас, когда я запускаю свой скрипт, файл user.txt показывает это:

Hello World!

Я хочу это показать:

Hello
World!

Как мне это сделать??

РЕДАКТИРОВАТЬ: Вот мой сценарий оболочки:

echo -n "What is your first name? "
read first
echo -n "What is your last name? "
read last
echo -n "What is your middle name? "
read middle
echo -n "What is your birthday? "
read birthday
echo -e "First Name: $first /nLast Name: $last /nMiddle Name: $middle /nBirthday: $birthday" >> /Users/matthewdavies/Desktop/user.txt
qlmanage -p "~/Desktop/user.txt"

2 ответа2

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

Объяснение:

Экранирующая последовательность \n указывает на перевод строки. Передача аргумента -e в echo позволяет интерпретировать escape-последовательности.

Это может даже быть упрощено далее:

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

или даже:

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

или на самом деле вам не нужны переменные:

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

Существует проблема с john t answer: если у любого из vars есть строка \n (или какая-либо другая последовательность, например \t), они будут переведены. что-то похожее на его ответ можно получить с помощью printf:

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

тоже хм. я вижу, вы составляете ответ в переменную $ logwrite. если это единственное использование этой переменной, это кажется бессмысленным.

Я думаю, что здесь документ может быть более читабельным, особенно если у вас есть много строк, чтобы добавить в журнал:

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

(это слово EOF - это разделитель, который вы можете выбрать. Это может быть любое слово).

Имейте в виду, что heredoc будет расширять переменные $, как двойные кавычки. если вы не хотите этого, вы цитируете heredoc, например << "EOF"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .