2015-01-16 2 views
3

파일에 다음 명령이있는 파일이 있습니다.이중 공백이 자동으로 단일 공백으로 바뀝니다.

#!/bin/csh -f 
echo "test test" //echo test [dobule space] test 
set a = "test test" //set a = test [dobule space] test 
echo $a 

출력은 다음과 같습니다. 나는 가치를 설정하면

테스트 [dobule 공간] 테스트

테스트 [하나의 공간] 테스트

어떻게 이중 공간은 하나의 공백으로 대체됩니까?

도움을 주시면 감사하겠습니다.

+0

예고하지 못했습니다 .. –

+0

@AvinashRaj 오해의 소지가있는 제목 때문입니다. 그것을 수정했습니다. –

+1

@ivan_pozdeev 질문을 제대로 읽지 않았기 때문입니다. 제목과 아무 관련이 없습니다. – arco444

답변

6

값을 a로 설정하면 이중 공간이 어떻게 하나의 공백으로 대체됩니까?

아니요. 단일 공백으로 바꾸지 않습니다. echo에서 따옴표를 사용하지 않았기 때문입니다. 사용 :

echo "$a" 

두 줄 간격의 문자열을 얻으려면.

쉘은 기본적으로 변수를 인용하지 않으면 여러 개의 공백을 하나의 공백으로 잘라냅니다.

s='a  b' 
echo $s 
a b 

그러나 금리 :

echo "$s" 
a  b 

편집 : 당신이 CSH에서이 작업을 수행 할 수 있습니다 아래 댓글 :

set QUERY = "select p.path from path p, file f where p.pathid=f.pathid and f.fileid=1234" 
set dir = "`/usr/etc/venture/bin/mysql -BN -uroot -***** ****-e '$QUERY'`" 
echo "$dir" 
+0

안녕하세요, Anubhava, 작동하지 않았습니다. – Roni

+0

시도했습니다. 그러나 그 오류. :(다른 방법은 없습니까? – Roni

+0

오류가 아니므로 질문에 추가하겠습니다. – anubhava

0

에도이 하나의 공간이 될 것입니다 bash에서 명령 행의 모든 ​​공백 문자는 기본적으로 r 값이 인용되지 않는 한 단일 공간으로 배치됩니다.

bash man page은 매우 로터리 방식으로하지만,이 문제를 알려줍니다

섹션 "인용"

:

묶는 문자를 작은 따옴표는 따옴표 내의 각 문자의 리터럴 값을 유지합니다.

큰 따옴표로 묶는 문자는 따옴표 안에있는 모든 문자의 리터럴 값을 보존합니다. 단, 이력 확장이 활성화되어 있으면 $,`, \를 제외하고!

... 공백 문자를 나타냅니다.그것이 밝혀, 이후, 그들은 "특별한"입니다

"단어 분할"섹션 : IFS이 설정되지 않은 경우, 또는 그 값은 정확히 <space><tab><newline>, 기본, <space>의 다음 순서입니다

경우 , <tab><newline>은 무시되며 앞의 확장 결과의 끝은 무시되며 시작 또는 끝이 아닌 IFS의 모든 문자는 단어를 구분하는 역할을합니다.

+2

하지만 이건 csh가 아니야. BASH – anubhava

+0

누구나'csh'에 아직도 쓰는 사람이 있니? 나 의미는'csh'를 사용하는 것은 매우 드문 것이고 전혀 강조되지 않았기 때문에 나를 미끄러 져 버렸습니다. –

+0

'csh'는 OP – arco444

관련 문제