2013-07-17 1 views
1

while 루프 반복 중에 입력 파일의 모든 공백을 보존하려고합니다. 다음은 내가 작업하고있는 파일입니다 (file1).`IFS = read -r` 여전히 공백을 보존하지 않는 동안?

[email protected]:~$ cat file1 
01: a b c 
02: d e f 

각 줄의 문자 사이에 탭을 배치했습니다. 나는 그 탭들을 출력하기를 원한다. 그래서 같은 while 루프에서 IFS를 삭제 시도 :

결과는 (나는 또한 에코 -e 시도) 심지어 내가 분명히 IFS 후 어떤 이유로 탭 없애는
while IFS= read -r p; do 
    echo $p 
done < <(cat file1) 

:

[email protected]:~$ sudo bash a.sh 
01: a b c 
02: d e f 

그러나, while 루프의 외부 I 분명한 IFS, 그것은 완벽하게 작동 할 때 : 여기

IFS='' 

while read -r p; do 
    echo $p 
done < <(cat file1) 

는 출력; 탭은 보존됩니다.

[email protected]:~$ sudo bash a.sh 
01: a b c 
02: d e f 

while 루프와 동일한 행에서 IFS를 지울 때 탭이 보존되지 않는 이유는 무엇입니까? 당신은뿐만 아니라 cat를 사용할 필요가 없습니다

while IFS= read -r p; do  
    echo "$p"; 
done < file1 

주의 사항 :

+1

왜'<<(cat file1)'vs'

+0

재미 있습니다. 나는 프로세스 리다이렉션에 대해 파일에서 리다이렉트를하는 것보다 훨씬 늦게 알게되었다. : D – anishsane

답변

4

은 그냥 변수를 인용.

+0

어. 정말 고마워. 그랬어. 나는 그것이 아주 간단 할 무언가가 될 줄 알았다. 항상 변수를 인용해야합니까? – orbit

+2

@orbit - 예 !!! 그 결과가 무엇인지 정확하게 알지 못하는 특별한 이유가 없다면 항상 변수를 인용해야합니다. –

+0

@orbit이 [link] (http://tldp.org/LDP/abs/html/quotingvar.html) 도움이 될 것입니다! –

관련 문제