Chcę powtórzyć nową linię do pliku pomiędzy zmiennymi w skrypcie powłoki. Oto mój kod:
var1 = „Witaj” var2 = „Świat!” logwrite = "$ var1 [Tutaj chcę wstawić nowy wiersz] $ var2 echo „$ logwrite” >> /Users/username/Desktop/user.txt
W tej chwili po uruchomieniu skryptu plik user.txt pokazuje to:
Witaj świecie!
Chcę, aby pokazywał:
Witaj Świat!
Jak mam to zrobic??
EDYCJA: Oto mój skrypt powłoki:
echo -n "Jak masz na imię?" najpierw przeczytaj echo -n "Jak masz na nazwisko?" przeczytaj ostatni echo -n "Jakie jest twoje drugie imię?" czytaj w środku echo -n "Jakie są twoje urodziny?" czytaj urodziny echo -e "Imię: $ pierwsze / n Ostatnie imię: $ ostatnie / nŚrednie imię: $ middle / nBirthday: $ birthday" >> /Users/matthewdavies/Desktop/user.txt qlmanage -p "~ / Desktop / user.txt"
shell
shell-script
echo
daviesgeek
źródło
źródło
printf "%s\n" $var1 $var2 >> file
?Odpowiedzi:
Wyjaśnienie:
\n
Sekwencja ucieczki sygnalizuje karetki. Przekazanie-e
argumentu do echa umożliwia interpretację sekwencji specjalnych.Można to jeszcze bardziej uprościć:
lub nawet:
źródło
\n
zamiast/n
zrobić lewę :)-e
flagi.lub faktycznie nie potrzebujesz varsów:
istnieje problem z odpowiedzią na pytanie: jeśli którykolwiek z vars miał ciąg \ n (lub inną sekwencję, taką jak \ t), zostaną one przetłumaczone. z printf można uzyskać coś podobnego do jego odpowiedzi:
także hmm. widzę, że komponujesz odpowiedź na zmienną $ logwrite. jeśli jest to jedyne zastosowanie tej zmiennej, wydaje się bezcelowe.
Myślę, że dokument tutaj może być bardziej czytelny, szczególnie jeśli masz dużo linii do dołączenia do dziennika:
(to słowo, EOF, jest ogranicznikiem, który możesz wybrać. może to być dowolne słowo).
uważaj, że heredoc rozwinie zmienne $, takie jak podwójne cudzysłowy. jeśli nie chcesz tego, cytujesz heredoc, np. << „EOF”
źródło
\n
, dlatego udzieliłem odpowiedzi. Metodologia „co jeśli” prowadziłaby każde pytanie na tej stronie do niekończącej się dyskusji. Gdy dojdzie do tej drogi, może zadać kolejne pytanie :)printf
. Jest POSIX: stackoverflow.com/a/34947759/895245