Ваша проблема здесь в том, что одиночная кавычка обрабатывается оболочкой или bash, и она фактически останавливает выполнение команды, пока пользователь не введет другую одинарную кавычку.
Если бы целая фраза была представлена пользователем в двойных кавычках, то им не нужно было бы экранировать ни одну кавычку или пробелы, т. Е .:
./myEgrep "it's" myArticle
Я считаю, что это довольно легко объяснить пользователям, даже менее опытным.
Затем в файле скрипта вам нужно снова заключить аргумент в двойные кавычки:
Xgrep "$1" "$myArticle"
Лучшая практика в сценариях - почти всегда заключать аргументы в двойные кавычки, так как это сохраняет пробелы внутри переменных.
Конечно, тогда остается вопрос о том, как пользователь может вставлять двойные кавычки из командной строки. Для вас простой ответ - использовать одинарные кавычки для переноса двойных кавычек, но, возможно, не для них; а что если они захотят смешать кавычки?
Другой вариант будет для вас обработать ввод и преобразовать пробел в регулярное выражение для любой длины любого пробела, и одиночные кавычки в регулярное выражение для всех кавычек, включая кавычки открывать / закрывать Unicode? Опять же, легко объяснить пользователям. Любая другая схема, и вы будете изобретать escape-коды.