Linux 쉘 스크립팅: 예상치 못한 변수 동작

Linux 쉘 스크립팅: 예상치 못한 변수 동작

두 줄이 포함된 변수가 있는데 $myvar그 중 첫 번째 줄을 새 변수에 넣고 싶습니다.

내가 시도할 때:

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

echo가 예상한 대로 개행 문자를 출력하지 않기 때문에 작동하지 않습니다.

분명히 나는 ​​이것을 할 수 있습니다 :

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

echo의 출력에는 첫 번째 줄에 한 단어가 있고 두 번째 줄에 한 단어가 포함되어 있으므로 작동합니다.

두 가지 질문이 있습니다.

  1. 줄바꿈 대신 공백을 인쇄하는 이유는 무엇입니까?
  2. 더 쉽게 또는 더 정확하게 만들 수 있습니까? (저는 쉘 스크립팅 전문가가 아닙니다. 여기에 뭔가 빠졌을 수도 있습니다.)

답변1

공백을 적절하게 유지하려면 인수를 echo따옴표로 묶습니다.

echo "$myvar"

그렇지 않으면 공백으로 구분된 값 요소가 에 대한 개별 인수로 처리됩니다 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

무언가의 첫 번째 줄을 얻으려면 head -n1완벽하게 작동합니다. 실제로 필요한지 여부는 요구 사항과 가능한 값에 따라 다릅니다.

관련 정보