【问题标题】:call a bash variable which has spaces调用一个有空格的 bash 变量
【发布时间】:2013-07-29 17:56:39
【问题描述】:

我在 bash 中有一个测试 SVN 脚本,它调用其中有空格的标签。这存储在一个变量中。见下文,

#!/bin/bash


grepper="trunk-index FOR in footer"

a=`svn ls -v file:///var/tags/folderrepo | grep $\"grepper\" | awk '{print $1}'`
echo $a
echo $grepper

echo $a 没有为 FOR in 和 footer 提供此类或目录 echo $grepper 给出变量 grepper 的内容

在命令行中,我可以使用引号调用标签,

[user@test scripts]# svn ls -v file:///var/tags/folderrepo | grep "trunk-index FOR in footer"
131  ?                    Jul 29 16:21 trunk-index FOR in footer/

但是,即使我在脚本中加上引号,也无法调用相同的方法。 需要在 grep 上放置什么,以便可以从 bash 脚本调用其中包含空格的标签。

谢谢!

【问题讨论】:

  • 一个不会“调用”变量。只调用函数。

标签: bash svn


【解决方案1】:

grep 不会看到您传递给它一个 shell 变量。 Shell 在启动请求的程序之前扩展/替换其变量。所以 grep 认为它被调用为

... | grep trunk-index FOR in footer | ...

并最终在一些不存在的文件FORinfooter 中搜索短语trunk-index

试试

 ... | grep '$grepper' | ...

改为。

【讨论】:

  • 我试过这个,但它在执行 echo $a 时没有输出。如何确保 grep 理解变量可以包含空格?否则我们将不得不要求用户不要放置空格,这必须作为最后的手段。
  • 这不是 grep 的工作。传递适当的论点是你的工作。 grep 只接受一个搜索词,因此您必须将任意字符串视为单个参数。因此' 在我的回答中引用了引号。
  • 这会将文字字符串'$grepper' 传递给grep 命令。如果要扩展 $grepper 变量的内容,请使用双引号:... | grep "$grepper" | ...。在这种情况下,双引号导致 shell 将 $grepper 的值视为单个“单词”,即使它包含空格。
猜你喜欢
  • 2014-07-18
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 2012-08-08
  • 2019-07-12
  • 1970-01-01
  • 2014-05-18
  • 2020-07-17
相关资源
最近更新 更多