Расширение параметра Bash для удаления вкладок

У меня есть такая строка в скрипте:

TATVAR=$(echo $PARAMVAR|sed -e 's/^[ \t]*//') 

Я хотел бы уменьшить это, чтобы не выполнять дополнительную программу (sed), shellcheck предложил мне, что я должен использовать:

 ${variable//search/replace} 

Я пробовал много регулярных выражений, но кажется, что это не работает. Кто-нибудь знает, как это сделать?

  • Смена PS1 на интерактивной подстроке bash
  • Использование! в расширении параметра
  • Как сделать ярлык ESCAPE + «_» в bash?
  • Расширение брееси не работает
  • Странно: завершение фона bash убивает родителя?
  • выполнение команд последовательно в bash
  • Кажется, что Bash находится в специальном режиме
  • Разместить работу в фоновом режиме без замораживания
  • 2 Solutions collect form web for “Расширение параметра Bash для удаления вкладок”

    Вы можете использовать "${PARAMVAR//$'\t'/}" , но обратите внимание, что это функция bash, поэтому другие оболочки могут ее не поддерживать. Это означает, что вы начинаете свой скрипт с #!/bin/bash , а не #!/bin/shне запускаете его с помощью sh scriptname ).

     $ PARAMVAR=$'space: tab:\tlinefeed:\nend' $ echo "$PARAMVAR" space: tab: linefeed: end $ echo "${PARAMVAR//$'\t'/}" space: tab:linefeed: end 

    Для сравнения, использование [[:blank:]] также избавится от пробелов:

     $ echo "${PARAMVAR//[[:blank:]]/}" space:tab:linefeed: end 

    И вы всегда должны обертывать ссылки переменных в двойных кавычках, иначе все пробелы обрабатываются как разрывы слов (и echo затем превращает их в пробелы):

     $ echo $PARAMVAR space: tab: linefeed: end 

    Я только что справился с этим:

     TATVAR="${PARAMVAR//[[:blank:]]/}" 

    Я был бы рад, если кто-то сможет подтвердить, что это правильно.

    Linux и Unix - лучшая ОС в мире.