쉘 스크립트는 파일에 줄 바꿈


26

쉘 스크립트에서 변수 사이의 파일에 새로운 줄을 에코하고 싶습니다. 내 코드는 다음과 같습니다.

var1 = "Hello"
var2 = "세계!"
logwrite = "$ var1 [여기는 새 줄을 삽입하고 싶습니다] $ var2
echo "$ logwrite">> /Users/username/Desktop/user.txt

현재 스크립트를 실행하면 user.txt 파일에 다음이 표시됩니다.

안녕하세요 세계!

나는 그것을 보여주고 싶다.

안녕하세요
세계!

어떻게해야합니까 ??

편집 : 여기 내 셸 스크립트가 있습니다 :

echo -n "이름이 뭐예요?"
먼저 읽으십시오
echo -n "성은 무엇입니까?"
마지막으로 읽다
echo -n "중간 이름은 무엇입니까?"
중간을 읽으십시오
echo -n "생일은 무엇입니까?"
생일을 읽다
echo -e "이름 : $ first / n 성 : $ last / n 중간 이름 : $ middle / n 생일 : $ birthday">> /Users/matthewdavies/Desktop/user.txt
qlmanage -p "~ / Desktop / user.txt"

1
이 "logwrite"변수를 만들어야합니까? 쓸 수 있습니까 printf "%s\n" $var1 $var2 >> file?
glenn jackman

아니요, 작업중 인 수정 된 스크립트에서 필요하지 않으며 $ logwrite 변수를 사용하지 않습니다. 감사.
daviesgeek

답변:


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

설명:

\n이스케이프 시퀀스는 줄 바꿈을 나타냅니다. -eecho에 인수를 전달하면 이스케이프 시퀀스를 해석 할 수 있습니다.

더 단순화 될 수도 있습니다.

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

또는:

echo -e "Hello\nWorld! "  >> /Users/username/Desktop/user.txt

귀하의 예제는 작동하지만 코드에 통합하면 작동하지 않습니다. 게시물을 편집하고 스크립트를 추가하겠습니다.
daviesgeek

1
@ dave 이스케이프 시퀀스에 잘못된 슬래시를 사용하고있는 것 같습니다. \n대신 /n트릭을 수행해야합니다 :)
John T

(/ n 대신 \ n을 사용하여 고마워요 !!)
daviesgeek

@ dave 당신은 환영 이상입니다 :)
John T

KSH 스크립트의 AIX에서는 -e플래그가 필요하지 않았습니다 .
javaPlease42

5
var1='Hello'
var2='World!'
echo "$var1" >> /Users/username/Desktop/user.txt
echo "$var2" >> /Users/username/Desktop/user.txt

또는 실제로 var가 필요하지 않습니다.

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

john t answer에 문제가 있습니다 .var 중 하나에 \ n 문자열 (또는 \ t와 같은 다른 시퀀스)이 있으면 번역됩니다. printf로 대답과 비슷한 것을 얻을 수 있습니다.

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

또한 흠. 나는 당신이 변수 $ logwrite에 답을 작성하는 것을 본다. 이것이이 변수의 유일한 사용이라면 의미가없는 것 같습니다.

특히 로그에 추가 할 줄이 많은 경우 here-doc가 더 읽기 쉽습니다.

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

(이 단어 EOF는 선택할 수있는 구분 기호입니다. 어떤 단어라도 가능합니다).

heredoc은 큰 따옴표와 같이 $ variables를 확장합니다. 이것을 원하지 않으면 << "EOF"와 같이 heredoc을 인용하십시오.


문제는 vars가 없으므로 \n왜 대답을 제공했는지입니다. "만약"방법론은이 사이트의 모든 질문을 끝없는 토론으로 이끌 것입니다. 그가 그 길에 올 때 그는 다른 질문을 할 수 있습니다 :)
John T

@elias $ logwrite 변수는 스크립트를 변경하는 동안 편집 한 내용에서 남았습니다. 내 코드에서 $ logwrite var를 가져 왔습니다. John T.의 답변이 실제로 효과가있었습니다. 정말 고마워!
daviesgeek

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.