【问题标题】:Regular expression for one path beginning with another in Bash在 Bash 中以另一条路径开头的一条路径的正则表达式
【发布时间】:2022-01-08 22:13:32
【问题描述】:

我有一个看起来像这样的(相对)路径模式

this/is/*/it/

“this”是根文件夹,“is”是子文件夹,“*”是未知名称的文件夹。 等等……

我有第二条(相对)路径,我想知道它是否是第一部分的开始。第二条路径的示例是:

These must return true:
this/is/
this/is/definietly/it/

These must return false:
whats/this/
this/is/a/test/

只有文件夹(没有文件)。而且后面总是有 /。

我想像这样在 Bash 中使用正则表达式

if [[ $string =~ "^PATTERN$" ]]; then
  :
fi

这可能吗,还是我必须拆分路径而不使用正则表达式?

【问题讨论】:

  • 你的条件是什么让路径为真结果和路径为假结果?。
  • 路径最后包含/it/文件夹的结果为真?
  • 如果路径 1 以路径 2 开头,则为真。
  • [[ $path1 == "$path2"* ]]
  • @Fravadona 我试过 [[ "this/" == "this/is/"* ]] 它返回 false

标签: string bash split


【解决方案1】:

使用硬编码路径,您可以这样做:

#!/bin/bash
string1="this/is/a/longer/path"; #
string2="this/is/"; # prefix

if [[ $path1 == "$path2"* ]]; then 
    echo "true"; 
fi

我不明白你为什么要拆分字符串。当使用 bash 调用其他程序来完成您的工作时,bash 对于字符串操作非常强大。

正如你在上面的命令中提到的:

[[ "this/" == "this/is/"* ]]

我认为您可能需要在应用正则表达式之前考虑了解它们。您的陈述不可能是真实的,也不是从评论中得出的。它检查this/ 是否等于以this/is/ 开头的路径,这在任何情况下都不正确,因为第二条路径更长。您可能想尝试https://regexr.com/ 进行练习。注意左边的备忘单。

【讨论】:

  • 问题是 $path1 包含一个未知文件夹...
  • 请更准确地说您的要求是什么。只有知道您想要什么,我们才能为您提供帮助。例如脚本应该有参数吗?它应该识别当前目录并能够列出另一个目录中的内容吗?另外,在我进一步帮助您之前,请添加一些自己的努力证明(您目前所处的位置)作为对您问题的编辑;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多