2011-02-10 6 views
3

바라건대 이것은 간단한 하나의 것이어야합니다. 여기에 내 test.sh 파일이 있습니다 :bash 쉘 스크립트에서 변수에 공백을 넣는 방법?

#!/bin/bash 
patch_file="/home/my dir/vtk.patch" 
cmd="svn up \"$patch_file\"" 
$cmd 

"my dir"의 공백을 적어 둡니다. 내가 그것을 실행할 때,

$ ./test.sh 
Skipped '"/home/my' 
Skipped 'dir/vtk.patch"' 

나는 변수에 공간을 수용하고 명령을 실행하는 방법을 모른다. 그러나 bash 쉘에서 다음을 실행하면 문제없이 작동합니다.

$ svn up "/home/my dir/vtk.patch" #WORKS!!! 

어떤 제안을 주시면 대단히 감사하겠습니다! 나는 윈도우에서 cygwin에서 bash를 사용하고있다.

+0

왜 명령을 변수에 넣으시겠습니까? 왜 명령을 직접 실행하지 않습니까? –

+0

@Dennis - 패치 파일의 홈 디렉토리가 런타임에 감지됩니다. 다른 스크립트는 홈 디렉토리를 "/ home/my dir /"로 탐지하고이를이 스크립트의 인수로 전달합니다. 이 스크립트는 탐지 된 홈 디렉토리에 "vtk.patch"를 추가하고 패치 파일에서 svn을 실행합니다. – Bala

+0

[ "변수에 명령을 넣으려고합니다. 그러나 복잡한 경우는 항상 실패합니다."] (http://mywiki.wooledge.org/BashFAQ/050 "BashFAQ/050"). –

답변

4

plain $ cmd 대신 eval $ cmd를 사용하십시오.

+1

eval $ cmd가 작동합니다! 감사합니다 ... – Bala

+2

@Bala : [eval'의 보안 위험] (http://mywiki.wooledge.org/BashFAQ/048 "BashFAQ/048")에 유의하십시오. –

2

공간을 벗어나려고 했습니까?
일반적으로 UNIX 쉘은 파일 이름이나 폴더 이름에서 비표준 문자를 선호하지 않습니다. 이 문제를 처리하는 일반적인 방법은 문제의 성격을 벗어나는 것입니다. 시도 :

patch_file="/home/my\ dir/vtk.patch" 

백 슬래시에 유의하십시오.

+1

네, 해보았습니다. 출력을 건너 뛰었습니다 ' "/ home/my \' 'dir/vtk.patch"를 건너 뜀 – Bala

관련 문제