0

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

因此,首先我正在修改此处找到的脚本。

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

现在,当我尝试运行以下命令时:

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 视为文字。如何获取它以便将其读取为字符串而不是路径?

谢谢你的帮助!

4

1 回答 1

1

您有一些语法问题(shell 脚本 linter可以清除这些问题):

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

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

  • 您结合了您发布的子字符串内容的两个不同答案,[[ $foo == *bar* ]]并且[[ $foo =~ .*bar.* ]]. 第一个使用 glob,第二个使用正则表达式。只需使用[[ ! $filename == *myfile* ]]
于 2013-01-23T00:20:02.113 回答