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

时间:2015-07-13 17:25:38

标签: bash readline

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

read -d `echo -e "\e"` -p $'Give me a list:\n' PACKAGES

\ e是退出多行输入的转义字符。这是我在尝试删除一个角色时所得到的(我确实尝试了所有我知道的方法:alt +反斜杠,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,所以我无法删除任何只用转义转义的字符。我确实尝试过使用读取标志,让我删除字符,但输入不再是断路器。

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

1 个答案:

答案 0 :(得分:2)

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

像这样(未经测试):

<div>

<div data-dojo-type="dojox.layout.contentpane" >
{content}
</div>

</div>

如果您有其他终止条目,则可以使用任何其他测试而不是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 jackman正确添加的那样,对于更新的(4.0+)版本的bash,新的.内置函数可以在这里使用:

readarray