Skrypty powłoki Linux: nieoczekiwane zachowanie zmiennych

3

Mam zmienną $myvarzawierającą dwa wiersze i chcę umieścić pierwszy z nich w nowej zmiennej.

Kiedy próbuję:

$ myvar1 = $(echo $myvar | head -n 1) 

To nie działa, ponieważ echo nie generuje nowych linii, jak się spodziewam.

Oczywiście mogę to zrobić:

$ myvar1 = $(echo $myvar | cut -d " " -f 1)

Działa, ponieważ wyjście echa zawiera jedno słowo w pierwszym wierszu i jedno słowo w drugim.

Mam dwa pytania:

  1. Dlaczego przestrzenie drukowania echa zamiast podziałów linii?
  2. Czy można to poprawić lub poprawić (nie jestem specjalistą od skryptów powłoki, może coś tu brakuje)
zero2cx
źródło

Odpowiedzi:

5

Zawiń argument echow cudzysłów, aby poprawnie zachować białe znaki.

echo "$myvar"

W przeciwnym razie rozdzielone spacjami elementy wartości będą traktowane jako indywidualne argumenty echo.

$ ls -1
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites

$ myvar="$( ls -1 )"

$ echo $myvar
Desktop Documents Downloads Movies Music Pictures Sites

$ echo "$myvar"
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites

Aby uzyskać pierwszą linię czegoś, head -n1działa idealnie. To zależy od twoich wymagań i możliwych wartości, czy tak naprawdę potrzebujesz.

Daniel Beck
źródło