我正在编写一个bash脚本,它将使用readline命令来捕获用户的多行输入(包列表),但我不知道如何在输入文本时删除(反斜杠)字符(假设我犯了一个错误)。下面是我所暗示的代码的一部分。
read -d `echo -e "\e"` -p $'Give me a list:\n' PACKAGES
E是退出多行输入的转义字符。这里是我尝试删除一个字符时得到的结果(我尝试了我所知道的所有方法: alt+backslash,ctrl+w;ctrl+u):
# read -d `echo -e "\e"` -p $'Give me a list:\n' vPACKAGES
Give me a list:
line one
line two
line 3^H^W^U^H^
正如您所看到的,^H是如何反斜杠被入侵者,^W =ctrl+w,所以我无法删除任何字符只有转义转义。我确实试着玩读标志,-e让我删除字符,但进入不再成为一个破折号。
提前感谢您的建议和帮助。
发布于 2015-07-13 18:27:23
我绝对不会这样做的。我只会在循环中提示值,直到得到一个空条目或其他分隔符。
像这样的东西(未经测试):
pkgs=()
printf 'Give me a list:\n'
while read -e pkg; [ -n "$pkg" ]; do
# Validate package, etc., etc.
pkgs+=("$pkg")
done
# Use `${pkgs[@]}` ...
如果有其他终止条目,则可以使用任何其他测试而不是[ -n "$pkg" ]
。(例如[ "$pkg" = "." ]
测试.
等)
或者,正如格伦·杰克曼( glenn )正确地指出的那样,在使用更新(4.0+)版本的bash时,可以在这里使用新的readarray
内置器,如下所示:
printf 'Enter package names, one per line: hit Ctrl-D on a blank line to stop\n'
readarray -t pkgs
https://stackoverflow.com/questions/31389690
复制相似问题