想要从某个功能获取用户的输入。但是,提示符("请回答y或n。"在这种情况下)也包含在返回值中。
#!/bin/bash
input() {
while true; do
read -p "input y/n: " yn
case $yn in
[Yy]* ) yn="y"; break;;
[Nn]* ) yn="n"; break;;
* ) echo "Please answer y or n.";;
esac
done
echo $yn
}
val=$(input)
echo "val is: $val"
如果首先输入错误值,结果如下:
input y/n: other
input y/n: y
val is: Please answer y or n.
y
感谢。
答案 0 :(得分:5)
将您的错误回应到stderr(FD 2),而不是stdout(默认值,FD 1):
echo "Please answer y or n." >&2
答案 1 :(得分:3)
最好使用公共全局变量在函数和调用者之间传递值。它比使用命令替换召唤子shell更有效。
#!/bin/bash
input() {
while true; do
read -p "input y/n: " __
case "$__" in
[Yy]* ) __="y"; break;;
[Nn]* ) __="n"; break;;
* ) echo "Please answer y or n.";;
esac
done
}
input; val=$__
echo "val is: $val"