gpt4 book ai didi

regex - Bash:测试一个变量是否存在于另一个变量中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:37 26 4
gpt4 key购买 nike

我有两个变量,都是已被脚本移动的文件名列表。

变量 1:由较大变量的“读取”循环生成。在任何给定时刻,它只包含一个文件名。

var1 = pic1.jpg

var1 = pic2 duplicate.jpg

var1 = pic3(dup).jpg

var1 = pic4.jpg

var1 = subfolder/subfolder picture.png

如上所示,文件名可以包含空格,但并非总是如此。

变量 2:包含文件列表的字符串,每个文件名由 \n 换行符分隔。

var2 = pic1.jpg \n pic2 duplicate.jpg \n pic3(dup).jpg \n pic4.jpg

我正在尝试测试 var1 的内容是否可以在 var2 中找到:

    listcontains() {
for list_item in $1; do
# Does $list_item exist in $2?
if [[ "$list_item" =~ "$2" ]]; then
return 0
else
return "1"
fi
done

}

# Call function to see if var1 is in var2
if listcontains "$var1" "$var2"
then
# var1 is in var2; do stuff...
else
# Do different stuff...
fi

这个逻辑显然是错误的,或者语法是错误的,因为它总是返回一个不匹配的时刻:

does pic2 exist in pic2 duplicate.jpg
pic2.jpg
pic3(dup).jpg
pic3.jpg?
no

does pic3(dup).jpg exist in pic2 duplicate.jpg
pic2.jpg
pic3(dup).jpg
pic3.jpg?
no

我仍在学习 bash,所以如果有人能帮助我,我将不胜感激。

最佳答案

=~ 的右侧是正则表达式模式。左侧是要匹配的字符串。

你的论据倒退了。您也没有考虑 $list_item 中的任何正则表达式特殊字符,这会导致您的匹配失败。

您的 $list_item 条目是部分文件名还是完整文件名?如果它们是完整的文件名,那么使用 read 循环并对 $var2 中的每一行进行精确匹配可能会更容易,而不是这样(更好的是使用关联$var2 中的文件名数组,使匹配速度更快)。

有人说使用字符串作为文件名是个坏主意,因为这使得对它们做任何事情(特别是如果它们可以有空格等)变得困难甚至不可能。

关于regex - Bash:测试一个变量是否存在于另一个变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29754868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com