将shell命令的输出分配给变量时,不需要的Shell扩展

时间:2010-06-16 18:51:16

标签: svn bash scripting

我正在导出本地原型svn存储库的一部分以导入到不同的存储库中。我们在整个仓库中设置了许多svn属性,所以我想我会编写一个脚本来列出文件元素及其相应的属性。这有多难啊。

所以我开始写一个bash脚本,它将svn proplist -v的输出分配给一个变量,这样我就可以检查指定的文件是否有任何属性。

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

现在这样可以正常工作并回显svn proplist命令的输出。但是如果proplist命令返回类似

的内容
svn:ignore : * build

它在*上执行shell扩展,并在build属性值之前插入整个目录列表。因此,如果目录中包含a.txt,b.txt和build files / dirs,则输出看起来像。

svn:ignore : a.txt b.txt build

我认为我需要以某种方式逃避输出或某些东西以防止扩展发生,但还没有找到有用的东西。还有其他方法可以做到这一点,但我讨厌当我无法解决问题。而且我必须管理员,我认为这个击败了我(考虑到我可以花费的时间),

2 个答案:

答案 0 :(得分:2)

echo "$o"

将阻止值扩展。

答案 1 :(得分: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