首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除bash读取-d多行输入中的字符?

如何删除bash读取-d多行输入中的字符?
EN

Stack Overflow用户
提问于 2015-07-13 17:25:37
回答 1查看 1.1K关注 0票数 1

我正在编写一个bash脚本,它将使用readline命令来捕获用户的多行输入(包列表),但我不知道如何在输入文本时删除(反斜杠)字符(假设我犯了一个错误)。下面是我所暗示的代码的一部分。

代码语言:javascript
运行
复制
read -d `echo -e "\e"` -p $'Give me a list:\n' PACKAGES

E是退出多行输入的转义字符。这里是我尝试删除一个字符时得到的结果(我尝试了我所知道的所有方法: alt+backslash,ctrl+w;ctrl+u):

代码语言:javascript
运行
复制
# 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让我删除字符,但进入不再成为一个破折号。

提前感谢您的建议和帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-13 18:27:23

我绝对不会这样做的。我只会在循环中提示值,直到得到一个空条目或其他分隔符。

像这样的东西(未经测试):

代码语言:javascript
运行
复制
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内置器,如下所示:

代码语言:javascript
运行
复制
printf 'Enter package names, one per line: hit Ctrl-D on a blank line to stop\n'
readarray -t pkgs
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31389690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档