Я не совсем уверен, что этот сценарий должен делать, но попробуйте это:
File="$(Yad --file)"
if [[ "$File" =~ .*[.]desktop$ ]]; then
echo "yes"
else
echo "no"
fi
Bash соответствие регулярных выражения (=~
) использует расширенные регулярные выражения, а не выражение шарика. Чтобы обозначить любую последовательность из нуля или более символов, вам необходимо использовать .*
. .
означает «любой символ», а *
означает ноль или более раз. [.]
обозначает буквальный период, избегая значения «любого символа» .
, используемого отдельно. Я также добавил анкер конца строки ($
). Это заставляет шаблон соответствовать концу имени файла, как вы, вероятно, захотите, если вы согласуетесь с расширением.
В вашей первой строке также есть ошибка. Между значком и круглыми скобками $
не должно быть пробелов. Чтобы закрыть блок if
, вам необходимо использовать fi
.
Вы можете использовать сопоставление Glob стиле с Баш условными, просто использовать знак равенства:
if [[ "$File" = *.desktop ]]; then
Пуск, вставив это в http://www.shellcheck.net/ и исправить все ошибки, он показывает вам. Я вижу, как минимум три синтаксических ошибки. –
'if/then' не является статусом' case'. Но вы можете использовать оператор case: 'case $ File in * .desktop) echo yes ;; *) echo no ;; esac; ' –
Я уже пытаюсь, но та же проблема говорит мне попробовать еще раз –