Может ли быть так, что в вашем контексте выполнения gedit
не разрешается как исполняемая программа gedit, а как сценарий оболочки, функция или псевдоним, который выполняет gedit в фоновом режиме ? В противном случае я не вижу причин, по которым источник не должен выполняться.
Собственно, &&
я бы не использовал, как предложил полвоазул. Это решение приведет к тому, что.bashrc будет получен только в том случае, если gedit вернется с нулевым кодом выхода. Хотя мы, безусловно, должны надеяться, что программа с хорошим -поведением должна завершаться с 0, если все прошло хорошо, я видел достаточно программ, которые не заботятся о кодах выхода, а справочная страница gedit ничего не говорит о коде выхода., что технически означает, что код выхода не указан. Я бы не хотел, чтобы мои функции зависели от этого...
Бах... больше возиться, и кажется, что символ перед подстановочным знаком *рассматривается как .
Правильное использование подстановочных знаков для grep, по-видимому, .*не только*
Кроме того, \b не требовалось, когда я использовал .*в качестве подстановочного знака. Флаг -w работает как положено:
echo "somestringthing" | egrep -w 'somestring.*'
somestringthing
echo "somestringthing" | egrep -w 'somestringy.*'
(no output as expected)
y*
, 1*
и X*
в конце последних трех регулярных выражений будут соответствовать нулю или более y
, 1
и X
соответственно.
В конце входной строки somestringthing
у вас действительно есть ноль или более этих символов(ровно ноль ), так что все три выражения совпадают.
Если вы хотите сопоставить один или несколько y
в конце строки, используйте y+
или y{1,}
в расширенном регулярном выражении или yy*
или y\{1,\}
в базовое регулярное выражение(grep
без-E
):
echo somestringthing | grep -E 'somestringthingy+'
(это не производит вывода)
Также обратите внимание, что egrep
устарел, и вы должны использовать grep -E
. Если вы хотите сопоставить только полные слова, используйте grep -E -w
(, для этого потребуется граница слова в начале и конце совпадения во входных данных ).