我如何呼应使用bash脚本的一个或多个制表符? 当运行此代码

res='       'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]

我得到这个

res=[ x] # that is [<space>x]
有帮助吗?

解决方案

echo -e ' \t '

将回声“空间标签空间换行符”(-e意思是“启用反斜杠解释逸出”):

$ echo -e ' \t ' | hexdump -C
00000000  20 09 20 0a                                       | . .|

其他提示

使用printf,不echo

有多个不同版本的命令echo的。有/bin/echo(这可能会或可能不会是GNU Coreutils的版本,取决于系统),以及echo命令被内置到最炮弹。不同的版本有不同的方式(或没办法)来控制字符指定或禁用逃逸。

printf,在另一方面,具有低得多的变化。它可以存在,作为一个命令,通常/bin/printf,而且它内置了一些贝壳(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]

不与echo;它是外壳更换标签用空格echo以往任何时候都看到了。

echo是对简单的输出,像echo hello world,但每当你想要做更复杂的东西,你应该使用printf。您的可以的获得echo工作,但产生的代码很可能,当你用不同的echo实现或不同的shell中运行它失败。

双击引号之间的字符串:

echo "[$res]"

您也可以尝试:

echo Hello$'\t'world.

需要使用-e标志然后回声可以

echo -e "\t\t x"

从bash帮助页面:

  

形式$“字串”的词被特殊处理。字扩展为字符串,如由ANSI C标准中规定的取代反斜杠转义字符。

所以,你可以这样做:

echo $'hello\tworld'

使用回波打印的变量的值是常见的击陷阱。 参考链接:

http://mywiki.wooledge.org/BashPitfalls#echo_.24foo

使用逐字击键,^VCTRL+VC-v任何)。

当键入^V到终端(或在大多数Unix编辑),下面的字符被取逐字。您可以使用此输入您回荡在字符串中文字制表符。

类似如下的工作:

echo "^V<tab>"     # CTRL+V, TAB

击文档 QV , “援引嵌件”)

  

引述嵌件(C-Q,C-v)的   添加您键入到行逐字下一个字符。这是如何插入像C-Q键序列,例如

边注:根据本ALT+TAB应该做同样的事情,但我们所有的约束,且序列窗口切换,所以我们不能用它

  

标签嵌件(M-TAB)   插入一个制表符。

-

请注意:您可以使用此策略与各种人物和角色。像一个回车:

echo "^V^M"        # CTRL+V, CTRL+M

这是因为回车符是ASCII 13,和中号与字母的第13封信,所以当你键入^M,你得到的第13 ASCII字符。你可以看到它使用ls^M行动,在一个空的提示,这将插入一个回车,导致迅速采取行动,就像你打的回报。当这些字符通常解释的逐字的让你获得文字字符。

如果你想在脚本中使用echo "a\tb",运行脚本:

# sh -e myscript.sh

另外,也可以给myscript.sh执行权限,然后运行该脚本。

# chmod +x myscript.sh
# ./myscript.sh
res="\t\tx"
echo -e "[${res}]"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top