Правильный способ фильтрации результатов с помощью оператора if в цикле bash - PullRequest
2 голосов
/ 17 января 2020

Я пытаюсь выработать все oop, что позволит мне игнорировать некоторые совпадения. Пока у меня есть:

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

Кстати, я немного новичок ie с bash, поэтому, пожалуйста, будьте добры;)

1 Ответ

5 голосов
/ 17 января 2020

В Bash регулярные выражения не заключены в /, поэтому вы должны изменить свой тест на:

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

Так же как и при удалении /, я избежал . (иначе они будут соответствовать любому символу) и добавили $, чтобы соответствовать концу строки.

Но на самом деле вы можете использовать более простое (и немного более быстрое) совпадение с глобусом в этом случае:

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

Соответствует любой строке, заканчивающейся .min.js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...