Linux Bash Shell 通过制表符支持读取 (\t)

Linux Bash Shell 通过制表符支持读取 (\t)

\t水平选项卡的选项echo

wolf@linux:~$ echo hello
hello
wolf@linux:~$ 

wolf@linux:~$ echo -e '\thello'
    hello
wolf@linux:~$ 

中是否有类似的选项read

wolf@linux:~$ read -p 'hello '
hello wolf
wolf@linux:~$ 
wolf@linux:~$ read -p '\thello '
\thello wolf
wolf@linux:~$ 

所需输出

wolf@linux:~$ read -p '\thello ' <- need something to produce something like tab or `\t` in `echo`
    hello wolf
wolf@linux:~$ 

答案1

您始终可以使用 ksh93 样式$'...'的引号形式来理解这些转义序列:

IFS= read -r -p $'\thello ' var

( 和IFS=-r相关,我只是在这里添加它们,因为read没有它们的调用很少有意义)。

请注意,这-p不是标准sh函数。在 ksh/zsh 中,-p是从协进程读取,提示用 指定read 'var?Prompt: '。不幸的是bash选择在这里引入一个不兼容的API。不过你不必使用-p,你可以便携地做:

printf >&2 '\thello '
IFS= read -r var

printf确实识别其格式参数和说明符参数中的那些转义序列%b。是否echo识别它们(或接受-e识别它们的选项)取决于实现,并且对于许多实现(包括bash内置)取决于构建时间和运行时设置,因此最好避免

答案2

您总是可以简单地添加 8 个空格:

read -p '        hello '

但是,是的,您还可以获得实际的制表符:

read -p $'\t''hello '

或者

read -p "$(echo -e '\thello ')"

或者

read -p "$(printf '\thello ')"

相关内容