2010-08-10 2 views
3
$ cat isbndb.sample | wc -l 
13 
$ var=$(cat isbndb.sample); echo $var | wc -l 
1 

왜 문자열을 변수에 할당 할 때 줄 바꿈 문자가 누락됩니까? 개행 문자가 공백으로 변환되지 않게하려면 어떻게해야합니까?변수 보간 중 배쉬 라인 연결

저는 bash를 사용하고 있습니다.

답변

4

개행을 보존하려면 변수를 인용해야합니다.

$ var=$(cat isbndb.sample); echo "$var" | wc -l 

그리고 cat는 두 경우 모두 불필요 :

$ wc -l < isbndb.sample 
$ var=$(< isbndb.sample); echo "$var" | wc -l 

편집 :이 변수에 그 내용을 할당 할 때

배쉬는 일반적으로 파일에서 추가 후행 줄 바꿈을 제거합니다. 당신은 그들을 보존하기 위해 몇 가지 트릭을 사용해야합니다. 이 시도 :

null로 IFS 설정
IFS='' read -d '' var < isbndb.sample; echo "$var" | wc -l 

는 줄 바꿈에 분할되는 그것은 파일의 끝 때까지 파일을 받아 들일 수 null로 read의 구분 기호를 설정에서 파일을 방지 할 수 있습니다.

+0

$ var = $ (cat isbndb.sample); echo "$ var"| wc -l. 출력은 12이고 한 줄 누락 된 이유는 무엇입니까? 내 프로그램에서 실제로 다른 cmd의 출력이기 때문에 cat을 사용하여 파일에서 읽습니다. – turtledove

+0

내 마지막 빈 줄이 생략 된 것처럼 보입니다. 이 문제를 해결하는 방법? 감사합니다 – turtledove

+1

@ user408393 : 내 편집을 참조하십시오. –

0
var=($(< file)) 
echo ${#var[@]} 
+0

죄송합니다. 작동하지 않습니다. – turtledove