我试图将用户的输入转换为数组,但Shell接受用间隔分隔的用户输入。有没有办法接受每行单独给出的用户输入。我的代码如下:
#!/bin/bash
echo "enter the servers names..."
read -a array
for i in "${array[@]}"
do
echo $i
done
exit 0
输入:
hello world
我希望输入如下(在两个不同的行中):
hello
world
请帮助。感谢。
答案 0 :(得分:1)
您可以指定read
的分隔符来停止阅读,而不是换行符。 (read man page)
-d delim继续,直到读取DELIM的第一个字符为止 比新线
例如:
read -d':' -a array
如果你想要没有输入的分隔符,可以使用循环读入数组的元素,然后检查输入是否为空字符串。
i=0
read "array[$i]"
while [ "${array[$i]}" ];
do
let "i = i+1"
read "array[$i]"
done
所以输入将是
hello
world
# > there is one more empty line
答案 1 :(得分:1)
根据帮助阅读:
从标准输入或文件描述符FD ...
中读取单行
这个循环会改为:
echo "enter the servers names..."
i=0
until false; do
read server
[ -z "$server" ] && break
let i=i+1
array[$i]="$server"
done
for i in "${array[@]}"; do
echo $i
done
exit 0
循环将退出空行或EOF(ctrl-D)。
示例会话以空行终止:
@server:/ tmp $ ./test.sh
输入服务器名称...
SE1
SE2
se3SE1
SE2
se3
在se2之后空行上的EOF终止示例会话:
@server:/ tmp $ ./test.sh
输入服务器名称...
SE1
SE2
SE1
se2
请注意,我在阅读名称时检查空字符串;但是可以在任何循环中检查空字符串(或其他任何内容),例如在打印它们或进行其他计算时。
答案 2 :(得分:-1)
#!/bin/bash
echo "enter the servers names..."
read -a array -d '\n'
for i in "${array[@]}"
do
echo $i
done
exit 0
或
#!/bin/bash
echo "enter the servers names..."
readarray array
for i in "${array[@]}"
do
echo $i
done
exit 0