Gore Liu 6 years ago
parent
commit
2cc00f3287
1 changed files with 68 additions and 0 deletions
  1. 68 0
      19_Zsh-开发指南(第十九篇-脚本实例讲解).md

+ 68 - 0
19_Zsh-开发指南(第十九篇-脚本实例讲解).md

@@ -185,6 +185,74 @@ for i ($files) {
 (($#files_to_delete)) && rm -v $files_to_delete
 ```
 
+### 实例五:转换 100 以内的汉字数字为阿拉伯数字
+
+功能:转换 100 以内的汉字数字为阿拉伯数字,如六十八转换成 68。
+
+思路:
+
+1. 建一个哈希表存放汉字与数字的对应关系。
+2. 比较麻烦的是“十”,在不同的位置,转换成的数字不同,需要分别处理。
+
+实现:
+
+```
+#!/bin/zsh
+
+local -A table=(
+零 0
+一 1
+二 2
+三 3
+四 4
+五 5
+六 6
+七 7
+八 8
+九 9
+)
+
+local result
+
+if [[ $1 == 十 ]] {
+    result=一零
+} elif [[ $1 == 十* ]] {
+    result=${1/十/一}
+} elif [[ $1 == *十 ]] {
+    result=${1/十/零}
+} elif [[ $1 == *十* ]] {
+    result=${1/十}
+} else {
+    result=$1
+}
+
+for i ({1..$#result}) {
+    result[i]=$table[$result[i]]
+
+    if [[ -z $result[i] ]] {
+        echo error
+        return
+    }
+}
+
+echo $result
+
+运行结果:
+
+% ./convert 一
+1
+% ./convert 十
+10
+% ./convert 十五
+15
+% ./convert 二十
+20
+% ./convert 五十六
+56
+% ./convert 一百
+error
+```
+
 ### 总结
 
 本文讲解了几个简单的 zsh 脚本,后续可能会补充更多个。