2011-07-22 20:18:22 +0000 2011-07-22 20:18:22 +0000
25
25

Сценарий оболочки эхо новой строки в файл

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

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!

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

EDIT: Вот мой скрипт оболочки:

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)

32
32
32
2011-07-22 20:20:04 +0000
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
5
5
5
2011-07-22 20:35:53 +0000
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: если какая-либо из vars имела строку \n (или какую-либо другую последовательность, например \t), то она будет переведена. можно получить что-то похожее на его ответ с помощью printf:

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

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

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

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

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

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

Похожие вопросы

6
10
11
37
2