gpt4 book ai didi

linux - read -a 在 Bash 中没有按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 09:22:29 24 4
gpt4 key购买 nike

出于某种原因,当使用“read -a”时,我的脚本只将行的第一个元素放入数组中。例如,当输入“canada China”这样的字符串时,程序的输出只是:

canada
c
Canada changed to uppercase.

代替:

canada China
c
Canada Changed to uppercase.
C
China Already uppercase.

我的作业说明如下:

创建一个脚本来读取用户的输入并将其存储在一个数组中。然后,遍历数组并:

  • 如果第一个字符是小写,将其改为大写并在其旁边写上“Changed to uppercase”。
  • 如果第一个字母已经大写,输出输入的单词然后在它旁边写上“Already uppercase”。
  • 如果第一个字符不是字母,则输出输入的单词,然后在其旁边写上“Doesn't Start with a letter”。使用关联数组将小写字母转换为大写字母 [converterArray=([a]=A [b]=B …)]

这是我的代码:

#!/bin/bash

declare -A converterArray
converterArray=([a]=A [b]=B [c]=C [d]=D [e]=E [f]=F [g]=G [h]=H [i]=I [j]=J [k]=K [l]=L [m]=M [n]=N [o]=O [p]=P [q]=Q [r]=R [s]=S [t]=T [u]=U [v]=V [w]=W [x]=X [y]=Y [z]=Z)

read -p "Enter elements separated by space, return to end: " -a inputArray

lowercasemsg=" Changed to uppercase."
uppercasemsg=" Already uppercase."
notlettermsg=" Doesn't start with a letter."

echo $inputArray

for word in $inputArray; do
firstchar=${word:0:1}
echo $firstchar

case $firstchar in
[a-z]*)
word = ${converterArray[$firstchar]}${word:1}
echo $word$lowercasemsg
;;
[A-Z]*)
echo $word$uppercasemsg
;;
*)
echo $word$notlettermsg
;;
esac

done

编辑:感谢 John 的帮助,问题已经解决。我还解决了检查字母大小写的问题([a-z] 与 [[:lower:]]),并删除了不必要的“echo ”以进行调试。

#!/bin/bash

declare -A converterArray
converterArray=([a]=A [b]=B [c]=C [d]=D [e]=E [f]=F [g]=G [h]=H [i]=I [j]=J [k]=K [l]=L [m]=M [n]=N [o]=O [p]=P [q]=Q [r]=R [s]=S [t]=T [u]=U [v]=V [w]=W [x]=X [y]=Y [z]=Z)

read -p "Enter elements separated by space, return to end: " -a inputArray

lowercasemsg=" Changed to uppercase."
uppercasemsg=" Already uppercase."
notlettermsg=" Doesn't start with a letter."

for word in "${inputArray[@]}"; do
firstchar=${word:0:1}

case $firstchar in
[[:lower:]]*)
inputString=${converterArray[$firstchar]}${word:1}
echo $word$lowercasemsg
;;
[[:upper:]]*)
echo $word$uppercasemsg
;;
*)
echo $word$notlettermsg
;;
esac

done

(第二次编辑:修复了我忘记在等号周围放置空格的行,最初在之前的编辑中忘记了)

最佳答案

如果 $array 是一个数组,"${array[@]}" 给出所有的数组元素。裸 $array 仅引用第一个元素。

echo "${inputArray[@]}"

for word in "${inputArray[@]}"; do
...
done

关于linux - read -a 在 Bash 中没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40269181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com