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
}

浙公网安备 33010602011771号