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

Skrypt powłoki echo nowej linii do pliku

Chcę echo nowej linii do pliku między zmiennymi w skrypcie powłoki. Oto mój kod:

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

W tej chwili, kiedy uruchamiam mój skrypt, plik user.txt pokazuje to:

Hello World!

Chcę, żeby pokazywał:

Hello World!

Jak to zrobić?

EDIT: Oto mój skrypt powłoki:

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"

Odpowiedzi (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

Objaśnienie:

Sekwencja ucieczki \n oznacza podawanie linii. Przekazanie argumentu -e do echo umożliwia interpretację sekwencji ucieczki.

Można to nawet jeszcze bardziej uprościć:

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

lub nawet:

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

lub właściwie nie potrzebujesz vars:

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

jest problem z odpowiedzią john t: jeśli którykolwiek z vars miał ciąg \n (lub jakiś inny ciąg jak \t) to zostanie przetłumaczony. można uzyskać coś podobnego do jego odpowiedzi z printf:

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

również hmm. widzę, że komponujesz odpowiedź do zmiennej $logwrite. jeśli jest to jedyne użycie tej zmiennej, wydaje się to bezcelowe.

Myślę, że here-doc mógłby być bardziej czytelny, szczególnie jeśli masz dużo linii do dołączenia do logu:

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

(to słowo, EOF, jest delimiterem, który możesz wybrać. może to być dowolne słowo).

uważaj, że heredoc rozszerzy zmienne $, jak podwójne cudzysłowy. jeśli tego nie chcesz, cytujesz heredoc, jak np.