gpt4 book ai didi

regex - 在 bash 循环中使用 if 语句过滤结果的正确方法

转载 作者:行者123 更新时间:2023-12-02 09:04:54 26 4
gpt4 key购买 nike

我正在尝试找出一个循环,让我忽略一些匹配项。到目前为止我已经:

for d in /home/chambres/web/x.org/public_html/2018/js/lib/*.js ;  do
if [[ $d =~ /*.min.js/ ]];
then
echo "ignore $d"
else
filename="${d##*/}"
echo "$d"
#echo "$filename"
fi

done

但是当我运行它时,它们似乎仍然被包含在内。我做错了什么?

/home/chambres/web/x.org/public_html/2018/js/lib/underscore.js.min.js
/home/chambres/web/x.org/public_html/2018/js/lib/tiny-slider.js
/home/chambres/web/x.org/public_html/2018/js/lib/tiny-slider.js.min.js
/home/chambres/web/x.org/public_html/2018/js/lib/underscore.js

顺便说一句,我是 bash 的新手,所以请友善;)

最佳答案

在 Bash 中,正则表达式不包含在 / 中,因此您应该将测试更改为:

if [[ $d =~ \.min\.js$ ]]

除了删除封闭的 / 之外,我还转义了 . (否则它们将匹配任何字符)并添加了 $ 到匹配字符串的结尾。

但事实上,在这种情况下您可以使用更简单(并且稍微更快)的全局匹配:

if [[ $d = *.min.js ]]

这匹配以 .min.js 结尾的任何字符串。

关于regex - 在 bash 循环中使用 if 语句过滤结果的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59784535/

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