Что-то, что всегда работало для меня, заключалось в том, чтобы поместить весь путь в раздел Exec следующим образом:
[Desktop Entry]
Type=Application
Name=Factorio
Exec=/home/[USERNAME]/Games/factorio/bin/x64/factorio
Terminal=false
Я точно не знаю, для чего предназначен раздел Путь . -Я никогда им не пользовался.
check if it contains the sub-string
Выполнить проще
[ -z "${s##*substr*}" ] && echo Substring is present
Результат расширения ${…}
равен нулю (нулевой длины ), если substr
присутствует.
... how the condition present in if statement works? The
if [[ $STRING1 != "${STRING1/substr/}" ]]; then
Сравнивает две строки: исходную неизмененную и ту же строку с удаленным substr
(/substr/}
). Если они разные (!=
), исходная строка содержала substr
.
Это запутанный и специфичный для ksh -(хотя теперь поддерживаемый несколькими другими оболочками )способ написания стандарта:
case $STRING1 in
*substr*) echo Substring is present
esac
Или кш -конкретный:
if [[ $STRING1 = *substr* ]]; then
echo Substring is present
fi
${var/pattern/replacement}
— это оператор раскрытия параметра ksh, который расширяется до значения $var
, где первое вхождение pattern
заменено на replacement
.
Итак, ${STRING1/substr/}
— это $STRING1
, где первое вхождение substr
заменено ничем, поэтому удалено.
[[ string = pattern ]]
и [[ string != pattern ]]
— еще одна специфичная для ksh конструкция, которая сопоставляет строку с шаблоном. Когда шаблон цитируется, он воспринимается буквально, поэтому [[ string = "string" ]]
является оператором равенства (и неравенством с!=
).
Таким образом, команда [[ $STRING1 != "${STRING1/substr/}" ]]
возвращает true, если раскрытие $STRING1
и ${STRING!/substr/}
дает разные строки, что может произойти, только если в $STRING1
было хотя бы одно вхождение substr
, так что это способ чтобы проверить, что $STRING1
содержит substr
.
Хотя ни [[...]]
, ни ${var/pattern/replacement}
не являются стандартным синтаксисом sh
, команда [
и оператор ${var#pattern}
(, последний из которых также происходит от ksh ), являются стандартными. Так что иногда вы видите такой код, как:
if [ "$STRING1" != "${STRING1#*substr*}" ]; then
echo Substring is present
fi
Это стандартный (, хотя и не борновский )способ проверки того, что переменная содержит подстроку, но опять же запутанный и не имеющий преимуществ перед очевидным case
операторным подходом.