如何在 Bash 中将用户输入读取为数组?

moa*_*a_u 19 command-line bash

如何在bashshell中将用户输入读取为数组?

Ste*_*zzo 17

这是一种方法:

while read line
do
    my_array=("${my_array[@]}" $line)
done

echo ${my_array[@]}
Run Code Online (Sandbox Code Playgroud)

如果您只是运行它,它将继续从标准输入读取,直到您按下 Ctrl+D (EOF)。之后,您输入的行将在my_array. 有些人可能会发现此代码令人困惑。循环的主体基本上说my_array = my_array + element.

一些有趣的文档:

  • `read -r` 有时非常有用/重要...... Stefano 指向“读取内置手册页”的链接解释了它的用途......(防止反斜杠解释)。 (4认同)

ABc*_*ter 14

使用这个阅读它:

read -a arr
Run Code Online (Sandbox Code Playgroud)

对于打印,请使用:

for elem in ${arr[@]}
do 
  echo $elem
done
Run Code Online (Sandbox Code Playgroud)


gei*_*rha 5

并且每次都不会重新创建数组(尽管需要 bash 3.1 或更高版本):

\n\n
array=()\nwhile IFS= read -r -p "Next item (end with an empty line): " line; do\n    [[ $line ]] || break  # break if line is empty\n    array+=("$line")\ndone\n\nprintf \'%s\\n\' "Items read:"\nprintf \'  \xc2\xab%s\xc2\xbb\\n\' "${array[@]}"\n
Run Code Online (Sandbox Code Playgroud)\n\n

有关更多信息,请参阅http://mywiki.wooledge.org/BashFAQ/001

\n\n

与往常一样,为了避免编写错误,请阅读http://mywiki.wooledge.org/BashGuide并避免使用 tldp 指南,例如高级 bash 脚本指南。

\n