Как уже упоминали другие, egrep
является устаревшей версией, эквивалентной grep -E
.
Причина, по которой ваша оригинальная команда не работает в не-GNU версии grep объясняется тем, что вы используете неподдерживаемый синтаксис, такой как \s
и \d
. Это отдельная функция для поддержки расширенных регулярных выражений (то, что вы получаете с -E
).
Попробуйте изменить \s
и \d
для их эквивалентного сокращенного синтаксиса:
grep -E '^[[:space:]]+2\.[[:digit:]]+\.[[:digit:]]+$' <(rbenv install -l) | tail -1
Кроме того, я бы всегда рекомендовал использовать одинарные кавычки вокруг любого строкового литерала, чтобы избежать возможности интерпретации оболочкой таких символов, как $
и \
.
Для максимальной совместимости вы также можете хотите рассмотреть использование канала, а не подстановку процесса, и только использование синтаксиса регулярных выражений Basi c (т.е. замена +
на \{1,\}
):
version=$(rbenv install -l |
grep '^[[:space:]]\{1,\}2\.[[:digit:]]\{1,\}\.[[:digit:]]\{1,\}$' |
tail -1)