将数据存储在阵列中(bash脚本)



我想向用户询问以下输入:

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[@]}是数组的大小。

相关内容

  • 没有找到相关文章

最新更新