由於某些原因,當使用「read -a」時,我的腳本僅將行的第一個元素放入數組中。例如,輸入一個字符串,如「加拿大中國」時,程序的輸出簡單地寫着:讀-a在Bash中沒有像預期的那樣工作
canada
c
Canada changed to uppercase.
相反的:
canada China
c
Canada Changed to uppercase.
C
China Already uppercase.
是我的任務的說明如下:
創建一個讀取用戶輸入並將其存儲在數組中的腳本。然後,在Array上循環:
- 如果第一個字符是小寫字母,請將其更改爲大寫字母並將其寫入「更改爲大寫字母」。
- 如果第一個字母已經是大寫字母,輸出輸入字,然後寫在它旁邊「已經大寫」。
- 如果第一個字符不是字母,請輸出輸入字,然後在旁邊寫下「不以字母開頭」。 使用關聯數組做轉換從小寫爲大寫[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
EDIT :感謝John的幫助,問題已解決。我還修復了檢查字母([a-z]和[[:lower:]])大小寫的問題,並刪除了用於調試的不必要的「回聲」。
#!/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
(第2編輯:固定電話,我忘了把空間圍繞等號,原本被遺忘在以前的編輯)
由於'case'使用shell模式,你不需要明確的提取物中的第一個字符:'案 「$詞」 在[[:降低:] *)...' –
此外,閱讀[忘記在bash/POSIX shell中引用一個變量的安全含義](http://unix.stackexchange.com/q/171346/4667) –
並且使用大寫的第一個字母:'var = hello; echo「$ var - > $ {var ^} - > $ {var ^^}」' –