В BASH, как мне заменить r из переменной, которая существует в файле, написанном с использованием HTML

#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'}"