shell中转义特殊字符

在shell中,有时我们需要处理带有特殊字符的字符串,比如密码或者其他等等。下面提供一种支持多次转义的方法。

常见的特殊字符有 " ' ` \ | $ # ; 等。

直接使用echo并sed替换可能会出现问题,因此我将它们作为字符串来处理。

我们使用cat或者grep或者sed-p命令时,可以将结果赋给一个变量,不管这个结果是否包含特殊字符,最后echo出来一定会正确的显示,这就是一个正确的字符串。

#外面每有一层双引号,需要调用一次,因此单引号不用处理
function handle() {
  local lineNo=$1
  local line=$2
  if [[ $# != 2 ]]; then
    log "${lineNo}" "error" "handle 入参错误"
    exit 1
  fi
  local key=${line%%=*}
  local value=${line#*=}
  handleNewLine=""
  local char=""
  local index=0
  for ((index = 0; index < ${#value}; index++)); do
    char=${value:${index}:1}
    case $char in
    \#)
      handleNewLine=${handleNewLine}'\#'
      ;;
    \$)
      handleNewLine=${handleNewLine}'\$'
      ;;
    \\)
      handleNewLine=${handleNewLine}'\\'
      ;;
    \|)
      handleNewLine=${handleNewLine}'\|'
      ;;
    \;)
      handleNewLine=${handleNewLine}'\;'
      ;;
    \:)
      handleNewLine=${handleNewLine}'\:'
      ;;
    \")
      handleNewLine=${handleNewLine}'\"'
      ;;
    \`)
      handleNewLine=${handleNewLine}'\`'
      ;;
    *)
      handleNewLine=${handleNewLine}"${char}"
      ;;
    esac
  done
  if [[ -z $handleNewLine ]]; then
    log "${lineNo}" "error" "handle failed"
    exit
  fi
}

 

posted @ 2022-06-20 13:55  一个kirin魂儿  阅读(3043)  评论(0)    收藏  举报