#linux #bash #fedora #archlinux #bash4
#linux #bash #fedora #archlinux #bash4
Вопрос:
Как мне заменить r?
#!/bin/bash
...
# setup
if [[ $i =~ $screen ]]; then
ORIGINAL=${BASH_REMATCH[1]} # original value is: 3DROTATEr
AFTER =${ORIGINAL/\r/} # does not replace r
myThirdPartyApplication -o $replvar # FAILS because of r
fi
Комментарии:
1. не может быть пробелов вокруг
=
Ответ №1:
Это должно удалить первый r .
AFTER="${ORIGINAL/$'r'/}"
Если вам нужно удалить их все, используйте ${ORIGINAL// $ ‘ r’/}
Комментарии:
1. ИМХО, это лучший ответ, поскольку он позволяет избежать накладных расходов на запуск внешней программы (например, sed или tr). $ в начале $ ‘r’ необходим для преобразования r в символ ‘возврата каретки’ в шаблоне заменяемых объектов. Возможно, это не очевидно, r заменяется ничем (отсутствие символов между последними / и } .
2. возможно, это лучший ответ, и он работает и для меня. но есть проблема, о которой сообщает shellcheck: github.com/koalaman/shellcheck/wiki/SC3060
Ответ №2:
Вы могли бы использовать sed, т.е.,
AFTER=`echo $ORIGINAL | sed 's/\r//g'`
Комментарии:
1. Он также удаляет $’ в начале. Прохладный.
2. Сработало!!! Просто немного улучшите: пробелы не допускаются при присвоении значения: AFTER=echo …
Ответ №3:
Другой вариант — использовать ‘tr’ для удаления символа или заменить его на n или что-нибудь еще.
ORIGINAL=$(echo ${BASH_REMATCH[1]} | tr -d 'r')
Ответ №4:
Просто используйте буквальный ^M
символ, он не имеет смысла для bash .
Ответ №5:
Аналогично подходу @tharrrk, эта замена параметра также удаляет последний ‘r’:
AFTER="${ORIGINAL%'r'}"