用于在bash中转义字符串的命令

Use*_*er1 86 bash escaping

我需要一个bash命令,将字符串转换为转义的字符串.这是一个例子:

echo "hello\world" | escape | someprog
Run Code Online (Sandbox Code Playgroud)

escape命令将"hello\world"变为"hello \\ world".然后,someprog可以按预期使用"hello\world".当然,这是我将要做的事情的简化示例.

Pau*_*ce. 142

在Bash:

printf "%q" "hello\world" | someprog
Run Code Online (Sandbox Code Playgroud)

例如:

printf "%q" "hello\world"
hello\\world
Run Code Online (Sandbox Code Playgroud)

这也可以通过变量使用:

printf -v var "%q\n" "hello\world"
echo "$var"
hello\\world
Run Code Online (Sandbox Code Playgroud)

  • 请注意,'%q`在2012年左右被打破了十多年.它与`~`有问题.还有便携式sed单线http://stackoverflow.com/a/20053121/1073695 (5认同)
  • sed 确实更好,因为也可以逃避美元符号 (3认同)
  • 为了逃避美元符号,只需使用单引号代替,例如:`printf“%q”'he $ l&lo \ world'` (3认同)
  • @untore:`a ='abc $ def“:'; printf'%q \ n'” $ a“`产生`abc \ $ def \”:`(美元符号转义)。这是Bash 4.3(我在Bash 3.2中得到了相同的结果)。您使用什么版本? (2认同)

Cae*_*sar 13

Bash 内置${\xe2\x80\xa6@Q}扩展已在不久前添加:

\n
echo "hello\\\\world" | ( read -rsd \'\' x; echo ${x@Q} )\n\'hello\\world\'\n
Run Code Online (Sandbox Code Playgroud)\n

转义输出采用 Bash 格式,因此它可能不是您需要的。

\n

另请参阅:使用 Bash 时哪些字符需要转义?

\n


Fri*_*ner 8

Pure Bash,使用参数替换:

string="Hello\ world"
echo ${string//\\/\\\\} | someprog
Run Code Online (Sandbox Code Playgroud)

  • 想知道更多?http://wiki.bash-hackers.org/syntax/pe#search_and_replace (2认同)