如何使用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]
当前回答
从bash手册页:
形式为$'string'的单词被特殊处理。单词扩展为字符串,反斜杠转义字符替换为ANSI C标准指定的字符。
所以你可以这样做:
echo $'hello\tworld'
其他回答
使用echo打印变量值是一个常见的Bash陷阱。 参考链接:
http://mywiki.wooledge.org/BashPitfalls#echo_.24foo
把你的字符串放在双引号之间:
echo "[$res]"
如果你想在脚本中使用echo "a\tb",你可以这样运行脚本:
# sh -e myscript.sh
或者,您也可以将执行权限赋予myscript.sh,然后运行脚本。
# chmod +x myscript.sh
# ./myscript.sh
使用逐字键击,^V (CTRL+V, C-v,随便什么)。
当你在终端中(或者在大多数Unix编辑器中)输入^V时,下面的字符被逐字提取。您可以使用此选项在要回显的字符串中键入文字制表符。
如下所示:
echo "^V<tab>" # CTRL+V, TAB
Bash文档(q.v.,“quote -insert”)
引用插入(C-q, C-v) 将您键入的下一个字符逐字添加到该行。例如,这是如何插入像C-q这样的键序列。
边注:根据这个,ALT+TAB应该做同样的事情,但我们都绑定了窗口切换序列,所以我们不能使用它
tab-insert (M-TAB) 插入制表符。
--
注意:您可以将此策略用于各种不同寻常的字符。如马车归来:
echo "^V^M" # CTRL+V, CTRL+M
这是因为回车符是ASCII 13, M是字母表中的第13个字母,所以当你输入^M时,你会得到第13个ASCII字符。您可以使用ls^M在空提示符处看到它的运行,它将插入一个回车符,导致提示符的作用就像您点击回车一样。当这些字符通常被解释时,逐字逐句地得到字面字符。
res="\t\tx"
echo -e "[${res}]"