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

El script de Shell hace eco de una nueva línea en el archivo

Quiero hacer eco de una nueva línea a un archivo entre variables en un script de shell. Este es mi código:

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

Ahora mismo, cuando ejecuto mi script, el archivo user.txt muestra esto:

Hello World!

Quiero que muestre

Hello World!

¿Cómo lo hago?

EDIT: Aquí está mi script de shell:

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"

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

Explicación:

La secuencia de escape \n indica un avance de línea. Pasar el argumento -e a echo permite interpretar las secuencias de escape.

Incluso se puede simplificar más:

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

o incluso:

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

o en realidad no necesitas vars:

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

hay un problema con la respuesta de john t: si alguna de las vars tuviera la cadena \n (o alguna otra secuencia como \t) se traduciría. se puede obtener algo similar a su respuesta con printf:

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

también hmm. veo que está componiendo la respuesta en una variable $logwrite. si este es el único uso de esta variable, parece sin sentido.

Creo que un here-doc podría ser más legible, especialmente si tienes muchas líneas que añadir al log:

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

(esta palabra, EOF, es un delimitador que puedes elegir. puede ser cualquier palabra).

ten cuidado que el heredoc expandirá $variables, como las comillas dobles. si no quieres esto, entrecomillas el heredoc, como <<“EOF”