2012-11-05 2 views
2

을 삼키고없이 라인으로 변수 라인을 읽어 C 문자열). 불행히도이 코드의 어딘가에있는 \ 문자는 단순히 제거됩니다. 왜, 어떻게 수정해야합니까?나는 라인으로 변수 라인을 읽기 위해이 조각을 사용하고있는 문자

EDIT : 샘플 입력이됩니다 만 \ 벗겨

foo $'bar' 
fee $'ber\fbir' 

참고 아니라 C 문자열로 문자열을 해석 나중에 사용될 $''.

echo "${lines}" | sed 's/\\/\\\\/g' | while read line; do something with ${line}; done 

UPDATE : 난 그냥 몇 가지 테스트 후 위 나오지 라인을 업데이트했습니다, 지금 그것을 시도, 그들은 다음과 같이 여전히 read line에 존재하므로

+0

쉘은 변수 확장을 담당하므로 '$ {line}'의 이스케이프는 스크립트가 처리 될 때 제거됩니다. 이스케이프가 쉘에서 살아남기를 원하면 이스케이프를 벗어나야합니다. –

+1

@ jordanm의 대답과 마찬가지로'read -r'을 찾고 있습니다. 그의 대답은 지금은 삭제 될 것으로 보인다. – tripleee

+0

정식 답은'while IFS = read -r line;이다. ... '. 또한, bash를 사용하기 때문에 다음 문자열을 사용하십시오 :'while ... done <<< "$ lines"' –

답변

1

당신은 당신의 \ 문자를 탈출 할 수 그것은 나를 위해 일하고있다.

업데이트 2 : 그것은 jordanm가 나보다 더 나은 방법을 사용하고 있었다 그의 대답을 삭제 한 것 같다, 나는 여기에서 자신을 추가 할 것입니다 :

read 명령에 -r 매개 변수를 사용하여, 그것은 그것을 지시 슬래시를 벗어나지 마십시오. 따라서이 작업도 가능합니다 :

echo "${lines}" | while read -r line; do something with ${line}; done 
+0

이것이 문제의 좋은 해결책이라고 생각하지 않습니다. – jordanm

+0

@jordanm 해결책이 더 좋고,'read -r'에 대해 몰랐습니다. 어쨌든 광산은 다른 방법을 보여주기 때문에 유용 할 수 있습니다. 다른 솔루션을 갖고 싶은 질문을 게시 할 때, 희망 OP는 나처럼 생각해. – Nelson

+0

Ey Lorenzo,이게 다행 이네, 네가 행복하다면 upvoting을 고려해 보라. – Nelson

관련 문제