如何使用bash脚本回显一个或多个制表符? 当我运行这段代码时
res=' 'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]
我明白了
res=[ x] # that is [<space>x]
如何使用bash脚本回显一个或多个制表符? 当我运行这段代码时
res=' 'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]
我明白了
res=[ x] # that is [<space>x]
当前回答
使用printf,而不是echo。
echo命令有多个不同的版本。有/bin/echo(根据系统的不同,可能是GNU Coreutils版本,也可能不是),echo命令内置在大多数shell中。不同的版本有不同的方法(或没有方法)来指定或禁用控制字符的转义。
另一方面,Printf的变化要少得多。它可以作为命令存在,通常是/bin/printf,并且它被内置到一些shell中(bash和zsh有它,tcsh和ksh没有),但是不同版本之间的相似性要比echo的不同版本更大。并且您不必记住命令行选项(除了少数例外;GNU Coreutils printf接受——version和——help,内置bash printf接受-v var以将输出存储在变量中)。
举个例子:
res=' 'x # res = "\t\tx"
printf '%s\n' "[$res]"
现在是时候承认echo在你问的例子中同样有效了;你只需要在参数周围加上双引号:
echo "[$res]"
正如kmkaplan所写(两年半前,我才注意到!)原始命令的问题:
res=' 'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]
不是跟回声;而是shell在echo看到TAB之前用空格替换了它。
Echo适用于简单的输出,比如Echo hello world,但是当你想做一些更复杂的事情时,你应该使用printf。您可以让echo工作,但是当您使用不同的echo实现或不同的shell运行它时,结果代码可能会失败。
其他回答
把你的字符串放在双引号之间:
echo "[$res]"
你需要为echo使用-e标志
echo -e "\t\t x"
你也可以试试:
echo Hello$'\t'world.
echo -e ' \t '
将回显'space制表符换行符' (-e表示'启用反斜杠转义'):
$ echo -e ' \t ' | hexdump -C
00000000 20 09 20 0a | . .|
res="\t\tx"
echo -e "[${res}]"