2010-06-16 30 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

相关问题