bash中特殊字符打印(制表符)

执行下面的代码
[code="bash"]
$ a=aa
$ b=bb
$ echo -e $a"\t"$b
aa bb
$ c=echo -e $a"\t"$b
$ echo $c
aa bb
[/code]

第一次echo的时候,可以看到aa和bb之间有很大的空白,说明制表符打印成功
为什么第二种方式echo,tab就不见了

我现在的想要做的是,把a和b变量用tab拼接起来

[code="sh"]
bash -x -c 'c=echo -e a"\t"b; echo $c'
[/code]
输出:
[code="sh"]
++ echo -e 'a\tb'

  • c='a b'
  • echo a b a b [/code]

[list]
[*]c的内容是正确的,包含了\t
[*]echo $c,$c会被变量值替换,而\t会被命令行忽略,就变成了:echo a b
[*]"$c",也会被替换,但是注意是在双引号内部替换,所以是“a b”
[/list]

[code="sh"]
bash -x -c 'c=echo -e a"\t"b; echo "$c"'
++ echo -e 'a\tb'

  • c='a b'
  • echo 'a b' a b [/code] 另外一个例子: [code="sh"] bash -x -c 'array=("a\t1" b c);echo -e "${array[@]}"'
  • array=("a\t1" b c)
  • echo -e 'a\t1' b c a 1 b c [/code]

是以下的区别
echo -e $a"\t"$b
echo $a" "$b
对c赋值的时候,c已经转为aa bb的形式了,再echo出来就是aa bb了。
如果要保持tab打印,应该将c赋值为aa\tbb,然后echo -e转换出来就是了。