2013-09-21 3 views

답변

25

당신은 단지 그들을 인용 할 필요가 :

echo "\"$1\",\"$2\",\"$3\",\"$4\"" 

바와 같이 here주의 : (' "') 따옴표 내에서 모든 문자의 문자 값을 보존 따옴표로

묶는 문자를, '$'및 '\'을 제외하고 '$', '\'및 '\'을 제외한 나머지 문자는 '$'및 '`'는 특별한 의미를 큰 따옴표로 묶습니다 (참조).셸 확장). 백 슬래시는 다음에 '$', '' ',' ','\ '또는 개행 문자 중 하나가 뒤에 오는 경우에만 특별한 의미를 지닙니다. 큰 따옴표 안에 백 슬래시 뒤에 문자가없는 문자 앞에 오는 백 슬래시는 특별한 의미가 없습니다. 큰 따옴표는 큰 따옴표 안에 " "으로 표기 할 수 있습니다.이 옵션을 사용하면 이중 문자 '!'가 표시되지 않으면 이력 확장이 수행됩니다 따옴표는 백 슬래시를 사용하여 이스케이프 처리됩니다. '!' 앞에 오는 백 슬래시는 제거되지 않습니다 ..

특수 매개 변수 '*'및 '@'hav 이중 따옴표로 묶인 경우 특수 기호 의미 (쉘 매개 변수 확장 참조) 따옴표.

+1

'printf'가 아닌'print'이어야합니다. –

+0

아마'print' 대신에'echo'라고 말할 것입니다! – devnull

+0

@snyder 다른 쉘에도 인쇄 명령이 있습니다. – konsolebox

3

당신은 출력이 볼 수 있도록하기 위해 "을 탈출해야합니다, 당신은이 작업을 수행 할 수 있습니다

echo \""$1"\",\""$2"\",\""$3"\",\""$4"\" 
+0

첫 번째 버전은 위치 매개 변수 중 하나에'% '문자가 포함되어 있으면 문제가된다. 두 번째 작품. –

+0

@JonathanLeffler 오 그래, 맞아 편집 된 대답 –

+0

당신의 주장은'echo ""\ "$ 1 \", \ "$ 2 \", \ "$ 3 \", \ " $ 4 \ ""'또는 그 밖의 변수는 IFS와 가능한 경로명 확장을 사용하는 단어 분리의 대상이됩니다 – konsolebox

8

사용 printf, 더 이스케이프 할 필요가 없습니다 :

printf '"%s","%s","%s","%s";\n' $1 $2 $3 $4 

; 후행 너무 인쇄됩니다!

+0

해당 printf만이 모든 쉘과 호환되지 않습니다 – konsolebox

+1

Hmm ..'printf'는 [ POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html). – devnull

+0

네,하지만 System V에는 없습니다. – konsolebox

관련 문제