file="JetConst_reco_allconst_4j2t.png"
testseq="gen"
case "$file" in
*_"$testseq"_*) echo 'True' ;;
*) echo 'False'
esac
Использование case... esac
— один из самых простых способов выполнить сопоставление с образцом переносимым способом. В других языках он работает как оператор «switch» (bash
, zsh
и ksh93
, а также позволяет вам переходить -через различными несовместимыми способами ). Используемые шаблоны являются стандартными шаблонами подстановки имен файлов.
Проблема связана с тем, что _
является допустимым символом в имени переменной. Таким образом, оболочка увидит *_$testseq_*
как «*_
, за которым следует значение переменной $testseq_
и *
». Переменная $testseq_
не определена, поэтому она будет расширена до пустой строки, и вы получите *_*
, что, очевидно, соответствует имеющемуся у вас значению $file
. Вы можете ожидать получить True
, если имя файла в $file
содержит хотя бы одно подчеркивание.
Чтобы правильно разграничить имя переменной, используйте "..."
вокруг расширения:*_"$testseq"_*
.Это будет использовать значение переменной в виде строки. Если вы хотите использовать значение переменной как шаблон , используйте вместо этого *_${testseq}_*
.
Еще одним быстрым решением является включение символов подчеркивания в значение$testseq
:
testseq="_gen_"
, а затем просто используйте *"$testseq"*
в качестве шаблона (для сравнения строк ).
ДО:
sudo nano /usr/bin/gnome-tweaks
изменить:
#!/usr/bin/env/python3
отдо:#!/usr/bin/python3