bash返回解释的转义字符串

bash返回解释的转义字符串,bash,escaping,command-substitution,Bash,Escaping,Command Substitution,考虑下面的bash脚本 #!/usr/bin/env bash tstring="Hi\tThere" istring=$(echo -e $tstring) echo $istring # Prints: Hi There rstring=$(printf '%q' "$istring") # This is not doing what I intended echo $rstring # Prints: $'Hi\tThere' 我希望rs

考虑下面的bash脚本

#!/usr/bin/env bash

tstring="Hi\tThere"
istring=$(echo -e $tstring)
echo $istring   # Prints: Hi There
rstring=$(printf '%q' "$istring") # This is not doing what I intended
echo $rstring  # Prints: $'Hi\tThere'

我希望rstring与tstring相同,以便测试是否相等。那么基本上我该如何撤消创建istring并返回tstring的操作呢?

您不能真正可靠地执行此操作,因为一旦它转换为制表符,就无法知道原始转义序列是
\t
还是
\011
\x09
还是
\u0009
…好的,这很有意义,在这种情况下,我只需要去掉所有的空格,以便比较它们。谢谢。
printf“%q”“$string”
$string
转换为可重复用作shell输入的格式。表单看起来像
$'string'
,其中可能包含反斜杠转义序列。通过删除前导的
$”
和尾随的
'
,您基本上可以检索原始字符串
tstring
。请尝试类似这样的操作:
rstring=${rstring:2:${{rstring}-3}
。实际上您需要
printf-v rstring“%q'”$istring“