2010-06-16 3 views
0

로컬 prototypte svn 저장소의 일부를 다른 저장소로 가져 오기 위해 내 보냅니다. 우리는 파일 요소와 해당 속성을 나열하는 스크립트를 작성할 것이라고 생각했기 때문에 repo 전체에 여러 svn 속성을 설정했습니다. 얼마나 어려운 일이 될 수 있습니다.쉘 명령의 출력을 변수에 할당 할 때 원하지 않는 쉘 확장

그래서 svn proplist -v의 출력을 변수에 할당하는 bash 스크립트를 작성하기 시작 했으므로 지정된 파일에 속성이 있는지 확인할 수있었습니다.

#!/bin/bash 
o=$(svn proplist -v "$1") 
echo $o 

이제는 제대로 작동하고 svn proplist 명령의 출력을 에코합니다. 그러나 프로 플라이스트 명령이 다음을 반환하면

svn:ignore : * build 

등이 셸 확장을 수행하고 빌드 속성 값보다 먼저 전체 디렉토리 목록을 삽입합니다. 따라서 디렉토리에 a.txt, b.txt가 있고 파일/디렉토리가 빌드되어 있으면 출력은 다음과 같이 보입니다.

svn:ignore : a.txt b.txt build 

나는 어떻게 든 일어나고에서 확장을 유지하기 위해 출력 또는 뭔가를 탈출 할 필요가 파악하지만, 작동 뭔가를 찾을 못하고있다. 이 작업을 수행하는 다른 방법이 있지만 뭔가를 파악할 수 없을 때 나는 싫어합니다. 그리고 관리자 야, 나는이 사람이 나를 이길 거라고 생각한다. (쓸만한 시간을 준다.)

답변

2
echo "$o" 

은 값이 확장되지 않도록 할 것이다.

+0

와우, 나무를 통해 숲을 볼 수 없었던 것 같습니다. 나는 확장이 에코보다는 실제 할당에서 일어난다고 생각했다. 감사! –

1

쉘 확장을 수행하지만 에코에서 수행됩니다. 이를 보려면 bash 스크립트에서 set -x을 실행하십시오.

#!/bin/sh 
set -x 
o=$(echo 'one two *') 
echo $o 

을 그리고 여기 당신이 볼 수 출력입니다 : 다음은 그 예이다

++ echo 'one two *' 
+ o='one two *' 
+ echo one two others from expansion 

을 그리고 당신이 $o을 인용하는 경우, 모든 것이 제대로 작동 : 또한 set -v을 시도 할 수 있습니다

++ echo 'one two *' 
+ o='one two *' 
+ echo 'one two *' 
one two * 

.

관련 문제