2010-06-16 63 views
0

我正在導出本地原型svn存儲庫的一部分以導入到不同的回購站。我們在整個回購中設置了許多svn屬性,所以我想我會編寫一個腳本來列出文件元素及其相應的屬性。有多難是正確的。將shell命令的輸出分配給一個變量時不需要的Shell擴展

因此,我開始編寫一個bash腳本,將svn proplist -v的輸出分配給一個變量,以便我可以檢查指定文件是否具有任何屬性。

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

現在這工作正常,並回聲svn proplist命令的輸出。但是,如果proplist變種命令返回類似

svn:ignore : * build 

它執行對*外殼擴展,並插入整個目錄生成屬性值之前上市。因此,如果目錄中有a.txt,b.txt和其中的文件/目錄,輸出將如下所示。

svn:ignore : a.txt b.txt build 

我想我需要以某種方式逃避輸出或東西,以防止擴張發生,但還沒有找到有效的東西。還有其他的方法可以做到這一點,但我討厭什麼時候我無法弄清楚什麼。並且我必須要管理員,我認爲這個人打敗了我(很好,因爲我可以花費在它上面)

回答

2
echo "$o" 

將防止值被擴大。

+0

哇,我想我無法通過樹木看到森林。我認爲這次擴張是在實際任務中進行的,而不是回聲。謝謝! – 2010-06-16 19:07:53

1

雖然它確實執行shell擴展,但它在echo處執行。要看到這個,在你的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,一切正常:

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

您也可以嘗試set -v

相關問題