将用户输入读入数组,直到用户输入特定条目


0

我需要创建一个bash,从用户那里获取输入并将它们插入到数组中,直到用户输入特定内容为止。例如,如果我运行脚本:

enter variables: 3 4 7 8 ok  

我得到这个数组: array=( 2 4 7 8 )

要么:

enter variables: 15 9 0 24 36 8 1 ok

我得到这个数组: array=( 15 9 0 24 36 8 1 )

我怎样才能做到这一点?

Answers:


1

使用换行符作为默认分隔符:

read -a array -p "enter variables: "

如果您想要换行符以外的其他字符,例如y

read -a array -d y -p "enter variables: "

您只能使用单个字符作为定界符read

编辑:

ok定界符一起使用的解决方案:

a=
delim="ok"
printf "enter variables: "
while [ "$a" != "${a%$delim}${delim}" ]; do
    read -n1         # read one character
    a="${a}${REPLY}" # append character
done
array=(${a%$delim})  # remove "ok" and convert to array
unset a delim        # cleanup
echo                 # add newline for following output

注意:此版本还接受格式的输入3 4 7 8ok(不带最后一个空格字符),但是使用特殊字符(例如DelBackspace不起作用)进行行编辑。它们被视为原始输入。


我把echo $array我的bash进行测试,它只返回第一个值。
BlackCrystal

1
您需要echo "${array[@]}"。与一起,$array您将获得第一个价值${array[0]}
弗雷迪

1
这不能回答问题。在ok似乎并不重要,它是留在数组中。
库沙兰南达

@Kusalananda如果换行符或是y“特定内容”(ok),则执行此操作。
弗雷迪

@Kusalananda添加了ok分隔符的版本。
弗雷迪
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.