Как правильно проверить расширение файла в операторе if?

Это можно сделать без ключей SSL, используя mitmproxy :

  1. Запустить mitmproxy
  2. Перейти к настройкам Wi-Fi Android и настройте прокси-сервер HTTP так, чтобы он был IP вашего ПК плюс порт 8080 (по умолчанию)
  3. Откройте стандартный браузер Android и перейдите на mitm.it . Коснитесь логотипа Android и установите сертификат для «VPN и приложений».

2
23.05.2017, 15:39
2 ответа
for x in ./*; do
   case $x in
      *".a" ) echo "$x";;
   esac
done

Конструкция [ не совсем точная подходит для этого. Но если вы настаиваете, мы можем сделать это следующим образом:

[ '.a'  =  ".${x##*.}" ]

Объяснение

Скажем, $ x содержит: my.file.testing.a Тогда $ {x ## *.} , начиная слева, снимет столько, сколько сможет, до последнего . удается увидеть в $ x . IOW, мы в конечном итоге отбрасываем все и выводим на первый план расширение , а именно, a . Итак, теперь у нас есть расширение, которое мы только что вычислили, чтобы сравнить с тем, что, по нашему мнению, было бы лучше ( .a ) для достижения успеха.

4
27.01.2020, 21:56

В ответе, на который вы ссылаетесь в своем вопросе, используется расширенный синтаксис проверки bash (двойная скобка), тогда как вы пытаетесь использовать оператор проверки POSIX с одной скобкой. Разница в том, что в тесте с двойными скобками правая часть == рассматривается как шаблон, а не подвергается разбиению на слова или расширению glob. Таким образом, если [ $f == *.a ] приводит к ошибке [: слишком много аргументов, вы можете сделать

for f in *; do if [[ $f == *.a ]]; then echo "$f"; fi; done

или (более компактно)

for f in *; do [[ $f == *.a ]] && echo "$f"; done

Альтернативно, поскольку вы, похоже, используете bash, вы можете использовать оператор =~ регулярного выражения e. например,

for f in *; do if [[ $f =~ \.a$ ]]; then echo "$f"; fi; done

или (более компактно)

for f in *; do [[ $f =~ \.a$ ]] && echo "$f"; done

хотя в данном случае это излишество.

1
27.01.2020, 21:56

Теги

Похожие вопросы