字符串包含在Bash中,它是一个目录路径

时间:2013-01-22 23:45:37

标签: bash unix

我正在编写一个仅导出已更改文件的SVN脚本。这样做我只想导出文件,如果它们不包含特定文件。

所以,首先我要修改找到here的脚本。

我找到了一种方法来检查字符串是否包含使用找到的功能here

现在,当我尝试运行以下内容时:

filename=`echo "$line" |sed "s|$repository||g"`
if [ ! -d $target_directory$filename ] && [[!"$filename" =~ *myfile* ]] ; then

fi

但是我不断收到错误说明:

/home/home/myfile: "no such file or directory"

看来BASH将$ filename视为文字。如何获取它以便将其作为字符串而不是路径读取?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您有一些语法问题(shell script linter可以解决这些问题):

  • 在[[[“之后需要一个空格,否则它将被解释为一个命令(给出类似于你发布的错误)。
  • 在“!”之后需要一个空格,否则它将被视为操作数的一部分。

你还需要在then子句中使用某些东西,但既然你设法运行它,我会假设你把它遗漏了。

  • 您合并了发布的子字符串中的两个差异答案,[[ $foo == *bar* ]][[ $foo =~ .*bar.* ]]。第一个使用glob,第二个使用正则表达式。只需使用[[ ! $filename == *myfile* ]]
  • 即可