出于某种原因,当使用“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/