在 Bash 脚本中回显变量时如何转义特殊字符?

How to escape special characters when echoing variable in Bash script?

Whosebug 同学,

我应该如何处理像这样的字符串中的转义特殊字符:

^VfAro@khm=Y)@5,^AyxPO[[jW#+Vg;Paj2ycIj8VUr5z1,}qR~JnK7r_0@$ov

我在一个变量中使用这个字符串,该变量通过管道传送到 Bash 脚本中的 cryptsetup luksOpen

echo "${string}" | cryptsetup luksOpen UUID={...}

但是在执行脚本时,我删除了一些字符。当回显 plain 字符串时,所有字符都会被保留。

我试过使用不同的变量封闭以及 printf "%q" 但没有任何可行的结果。

如果您 想要在 cryptsetup 的输入中添加尾随换行符:

s='^VfAro@khm=Y)@5,^AyxPO[[jW#+Vg;Paj2ycIj8VUr5z1,}qR~JnK7r_0@$ov'
printf '%s\n' "$s" | cryptsetup luksOpen

如果您想要尾随换行符:

s='^VfAro@khm=Y)@5,^AyxPO[[jW#+Vg;Paj2ycIj8VUr5z1,}qR~JnK7r_0@$ov'
printf '%s' "$s" | cryptsetup luksOpen

在这两种情况下,当我们关心逐字节完美输出时,我们不使用 echo