我想向用户询问以下输入:
Echo "Please enter name: "
read name
read -r -p "Is this a costumer? (Y/N)" response;
if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
then
echo "Please enter name: "
read name
AreYouDone
else
"Please enter name "
read name2
AreYouDone
fi
echo $name is a costumer
echo $name2 is an employer
这个想法是继续要求 name 和 name2 ,并根据y/n答案打印所有内容。
但是如何将它们存储到不同的变量中?**
可能有20个名字,有些是顾客和一些雇主。
P.S。:
清除任何混乱(如果有的话),areyoudone只是一个功能,它已经完成并已实施了。
谢谢。
听起来您想要两个阵列 - 一系列客户和一系列雇主。
declare -a customers=( ) employers=( )
while ! AreYouDone; do
echo "Please enter name: "
read name
read -r -p "Is this a costumer? (Y/N)" response;
if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]; then
customers+=( "$name" )
else
employers+=( "$name" )
fi
done
然后,按类型打印所有名称:
printf '%s is a customern' "${customers[@]}"
printf '%s is an employern' "${employers[@]}"
一种更奇特的方法是使用关联数组存储每个名称的类型信息。
declare -A names=( )
while ! AreYouDone; do
read -r -p "Please enter name: " name
read -r -p "Is this a customer? " type
if [[ $response = [Yy][Ee][Ss] ]]; then
names[$name]=customer
else
names[$name]=employer
fi
done
for name in "${!names[@]}"; do
echo "$name is a ${names[$name]}"
done
旁
AreYouDone() {
read -r -p 'Are you done?'
case $REPLY in
[Yy]*) return 0 ;;
*) return 1 ;;
esac
}
...并根据用户是否要退出,而不是让其退出。
声明数组/s。
示例:
declare -a names
for ((i=0;i<20;i++));do
read -rp "Enter name: " 'names[i]'
echo "${names[i]}"
done
此外(来自评论):您可以使用另一个for
循环构建完整句子,并获得您获得的输入:
for ((i=0;i<${#names[@]};i++));do
fullsentence+="Name is ${names[$i]} "
done
echo "$fullsentence"
当names
是一个索引数组,您可以在${names[$i]}
的某个索引中访问其值,其中$i
是索引。${#names[@]}
是数组的大小。