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



我正在编写一个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视为文字。如何获取它,以便它将其读取为字符串而不是路径?

感谢您的帮助!

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

  • 您需要在"[["之后添加一个空格,否则它将被解释为命令(给出与您发布的内容类似的错误)。
  • 您需要在"!"后面加一个空格,否则它将被视为操作数的一部分。

您还需要 then 子句中的某些内容,但由于您设法运行了它,我假设您只是将其省略了。

  • 结合了您发布的子字符串内容的两个不同答案,[[ $foo == *bar* ]][[ $foo =~ .*bar.* ]] .第一个使用 glob,第二个使用正则表达式。只需使用[[ ! $filename == *myfile* ]]

最新更新