$ -7} должен быть рабочей заменой $, если в STR гарантированно содержится не менее 7 символов. Если это может быть короче, это также заставит OS X bash жаловаться на отрицательные длины или будет ужасно ошибаться в версиях bash, которые поддерживают отрицательные длины, принимаемые как смещения справа.
Bash 4.3 Отрицательная длина подстроки в OS X
В Bash 4.2 добавлена поддержка отрицательных длин подстрок:
http://tldp.org/LDP/abs/html/abs-guide.html#SUBSTREXTR01
Пример 37-12. Отрицательный параметр в конструкции извлечения строки
Когда параметр "length" отрицателен, он служит параметром смещения от конца.
Например, следующие результаты «Мир» при тестировании на Ubuntu:
STR="Hello World!" echo $
Но в OS X (GNU bash, версия 4.3.42 (1) -релиз (x86_64-apple-darwin14.5.0)) такое использование приводит к следующей ошибке:
-1: substring expression < 0
Это специфическая OS X, или она была снова отключена в последующих обновлениях bash? Есть ли способ включить эту функцию для OS X?
2 ответа на вопрос
В то время как решение flabdablet работает только для строк фиксированной длины, вы можете использовать его в качестве замены для строк динамического размера:
echo $ - 6 - 1))}
В деталях:
${#STR}
возвращает длину строки.$((a - b - c))
делает математическое вычитание$
возвращает подстроку
Таким образом, второй аргумент выражения подстроки объединяет длину строки минус начальное смещение минус значение, которое вы указали бы как отрицательное значение в новом синтаксисе bash.
Похожие вопросы
-
2
.profile в Mac OS X?
-
1
Приостановить все, кроме x задач, интенсивно использующих процессор
-
10
Как я могу найти в истории bash и повторно запустить команду?
-
-
2
Можно ли передать выходные данные одной команды двум другим командам?
-
8
Переименуйте группу файлов одной командой
-
2
Почему мой путь не обновляется * сейчас *?
-
5
Как удалить символическую ссылку на каталог?
-
8
Спаси меня от бессмысленного терминала
-
9
Как можно добавить номер строки и табуляцию к каждой строке текстового файла?
-
1
Когда я должен положить конфигурации в .bashrc против. .bash_profile?