glarry Asked: 2018-01-29 00:46:49 +0800 CST2018-01-29 00:46:49 +0800 CST 2018-01-29 00:46:49 +0800 CST (如何)我可以获得 read var 以将文字 \b(退格键)添加到 var? 772 例如,用户键入foofoo\b\b\bbar,按回车键并得到一个var等号foofoo\b\b\bbar而不是foobar。是的,用户失去了删除功能,因此他们需要使用另一个快捷方式进行删除。或者至少反过来:正常的退格键(按下)给它们foobar,一些修饰符 + 退格键给它们文字退格键。 有没有办法启用read接受文字退格键? bash read 3 个回答 Voted Olorin 2018-01-29T00:59:08+08:002018-01-29T00:59:08+08:00 您可以使用Ctrlv逐字输入字符: bash-4.2$ read foo abc^Hfoo bash-4.2$ printf "%s\n" "$foo" | od -c 0000000 a b c \b f o o \n 0000010 bash-4.2$ printf "%q\n" "$foo" $'abc\bfoo' ^H是Ctrlv Backspace(或 ,根据Ctrlv CtrlH终端设置应该相同)。 ilkkachu 2018-01-29T01:56:56+08:002018-01-29T01:56:56+08:00 如果你想让用户输入\b(backslash-b) 作为退格键,你可以在read: read -r var var=${var//\\b/$'\b'} 如果您希望用户能够在不使用 的情况下按退格键Ctrl-V,您可以暂时取消设置终端的擦除字符。之后您可能需要将^?/\x7f替换为^H/ \x08。 stty_saved=$(stty -g) stty erase "" read var var=${var//$'\x7f'/$'\b'} stty "$stty_saved" ^?与 一样,退格键仍然打印为Ctrl-V。 (相反,如果您希望退格键删除屏幕上的字符,但仍保存退格键和删除的字符,您可能必须手动实现它。) Best Answer user232326 2018-01-29T09:01:30+08:002018-01-29T09:01:30+08:00 这个脚本(在 bash 中)将接受任何字符,除了 ^C(ASCII 03 ETX) ^J(ASCII 0A LF) ^M (ASCII 0D CR ) ^Z(ASCII 1A 子) ^\(ASCII 1C FS) 包括所有其他控制字符: #!/bin/bash while IFS= read -srn1 a ;do [[ "${a+x$a}" = "x" ]] && break var=$var$(printf '%s' "$a") printf '%s' "$a" done printf '\n%s\n' "$var" 将退格键键入CTRL- H。 代替: printf '\n%s\n' "$var" 和: printf '%s' "$var" | od -An -tx1 实际“看到”字节值。
您可以使用Ctrlv逐字输入字符:
^H
是Ctrlv Backspace(或 ,根据Ctrlv CtrlH终端设置应该相同)。如果你想让用户输入
\b
(backslash-b) 作为退格键,你可以在read
:如果您希望用户能够在不使用 的情况下按退格键
Ctrl-V
,您可以暂时取消设置终端的擦除字符。之后您可能需要将^?
/\x7f
替换为^H
/\x08
。^?
与 一样,退格键仍然打印为Ctrl-V
。(相反,如果您希望退格键删除屏幕上的字符,但仍保存退格键和删除的字符,您可能必须手动实现它。)
这个脚本(在 bash 中)将接受任何字符,除了
包括所有其他控制字符:
将退格键键入CTRL- H。
代替:
和:
实际“看到”字节值。